DrawerLayout's item click - When is the right time to replace fragment?

后端 未结 7 757
轻奢々
轻奢々 2020-12-07 11:16

I\'m developing an application which uses the navigation drawer pattern (With DrawerLayout).

Each click on a drawer\'s item, replaces the fragment in the main contai

相关标签:
7条回答
  • 2020-12-07 12:07

    This is what I do to achieve an smooth transaction animation similar to Gmail app:

    activity_drawer.xml

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <!-- The main content view -->
        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <!-- The navigation drawer -->
        <ListView 
        android:id="@+id/left_drawer"
            android:layout_width="280dp"
            android:layout_height="match_parent"
            android:layout_gravity="left"
            android:choiceMode="singleChoice" />
    
    </android.support.v4.widget.DrawerLayout>
    

    DrawerActivity.java

    private Fragment mContentFragment;
    private Fragment mNextContentFragment;
    private boolean mChangeContentFragment = false;
    
    private Handler mHandler = new Handler();
    
    ...
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
    
        mDrawerLayout.setDrawerListener(new DrawerListener());
    
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    
        ...
    }
    
    ....
    
    private class DrawerItemClickListener implements ListView.OnItemClickListener {
    
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            getSupportFragmentManager().beginTransaction().remove(mContentFragment).commit();
    
            switch (position) {
                case 0:
                    mNextContentFragment = new Fragment1();
                    break;
    
                case 1:
                    mNextContentFragment = new Fragment2();
                    break;
    
                case 2:
                    mNextContentFragment = new Fragment3();
                    break;
            }
    
            mChangeContentFragment = true;
    
            mDrawerList.setItemChecked(position, true);
    
            mHandler.postDelayed(new Runnable() {
    
                @Override
                public void run() {
                    mDrawerLayout.closeDrawer(mDrawerList);
                }           
            }, 150);
        }
    }
    
    private class DrawerListener implements android.support.v4.widget.DrawerLayout.DrawerListener {
    
        @Override
        public void onDrawerClosed(View view) {
            if (mChangeContentFragment) {
                 getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).replace(R.id.content_frame, mNextContentFragment).commit();
    
                 mContentFragment = mNextContentFragment;           
                 mNextContentFragment = null;
    
                 mChangeContentFragment = false;
             }
         }
     }
    

    Hope that helps you! :-)

    0 讨论(0)
提交回复
热议问题