Managing Fragments in a navigation drawer

一曲冷凌霜 提交于 2019-12-08 07:39:38

问题


I copied a navigation drawer from http://javatechig.com/android/navigation-drawer-android-example But I'm having trouble managing the fragments, or rather the main content on the screen.

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTitle = "Formulas";
    getActionBar().setTitle(mTitle);

    // Getting reference to the DrawerLayout
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    mDrawerList = (ListView) findViewById(R.id.drawer_list);

    // Getting reference to the ActionBarDrawerToggle
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open,
            R.string.drawer_close) {

        /** Called when drawer is closed */
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu();

        }

        /** Called when a drawer is opened */
        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle("Formulas");
            invalidateOptionsMenu();
        }

    };

    // Setting DrawerToggle on DrawerLayout
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    // Creating an ArrayAdapter to add items to the listview mDrawerList
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), 
            R.layout.drawer_list_item, getResources().getStringArray(R.array.menus));

    // Setting the adapter on mDrawerList
    mDrawerList.setAdapter(adapter);

    // Enabling Home button
    getActionBar().setHomeButtonEnabled(true);

    // Enabling Up navigation
    getActionBar().setDisplayHomeAsUpEnabled(true);

    // Setting item click listener for the listview mDrawerList
    mDrawerList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            // Getting an array of rivers
            String[] menuItems = getResources().getStringArray(R.array.menus);

            // Currently selected river
            mTitle = menuItems[position];

            // Creating a fragment object
            WebViewFragment rFragment = new WebViewFragment();

            // Passing selected item information to fragment
            Bundle data = new Bundle();
            data.putInt("position", position);
            data.putString("url", getUrl(position));
            rFragment.setArguments(data);



            // Getting reference to the FragmentManager
            FragmentManager fragmentManager = getFragmentManager();

            // Creating a fragment transaction
            FragmentTransaction ft = fragmentManager.beginTransaction();

            // Adding a fragment to the fragment transaction
            ft.replace(R.id.content_frame, rFragment);

            // Committing the transaction
            ft.commit();

            // Closing the drawer
            mDrawerLayout.closeDrawer(mDrawerList);

        }
    });
}




protected String getUrl(int position) {
    switch (position) {
    case 0:
        return "http://javatechig.com";
    case 1:
        return "http://javatechig.com/category/android/";
    case 2:
        return "http://javatechig.com/category/blackberry/";
    case 3:
        return "http://javatechig.com/category/j2me/";
    case 4:
        return "http://javatechig.com/category/sencha-touch/";
    case 5:
        return "http://javatechig.com/category/phonegap/";
    case 6:
        return "http://javatechig.com/category/java/";
    default:
        return "http://javatechig.com";
    }
}

How do I manage the fragment so that I can: - Input either basic xml/java (so I don't have to bother about bundles) in the project or - replace the current fragment so that I can create my own and customize everything myself


回答1:


I assume this is the example code from the Android Project shipped with the SDK. Your sample actually contains the code needed for swapping the fragments in the content pane of the Activity.

    // Getting reference to the FragmentManager
    FragmentManager fragmentManager = getFragmentManager();

    // Creating a fragment transaction
    FragmentTransaction ft = fragmentManager.beginTransaction();

    // Adding a fragment to the fragment transaction
    ft.replace(R.id.content_frame, rFragment);

    // Committing the transaction
    ft.commit();

Your rFragment is the fragment that is going to be loaded. You can put this whole section in a method and pass your fragment to be loaded as an argument of that method, e.g.

private void replaceFragment(Fragment newFragment) {
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.content_frame, newFragment);
    ft.commit();
}

If your Fragment to be loaded needs data to be passed to it, you can use the Bundle. Your fragments might take different types of data, but the code above still applies. Call it after you have called setArguments() on your Fragment object.




回答2:


Try Checking this answer ..

It ll help you setting-up & using the Navigation Drawer in a dynamic way...

https://stackoverflow.com/a/34244065/2457493

Hope this fulfills you query..



来源:https://stackoverflow.com/questions/20840769/managing-fragments-in-a-navigation-drawer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!