Navigation drawer in multiple activities

2019-06-13 19:06发布

I know this question has been asked multiple times. But my concern is different.

Using Mr. Tamada Tutorial I've created a NavigaionActivity and multiple fragments to replace in FrameLayout. It's working fine.

Now, after selecting any option in a fragment, another activity gets open.

I want the same Navigation menu in that Activity.

Navigation view -- fragments -- Activity (display navigation view here)

What I tried:

  1. use the xml code of displaying Navigation view in that activity. (DrawerLayout, CoordinatorLayout, AppBarLayout etc)

    Then in Activity.java, on click of menu item diverting to the Navigation Activity.

Code:

XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout  
    ....> 

    <android.support.design.widget.CoordinatorLayout  
    ....> 

         <android.support.design.widget.AppBarLayout
         ....> 

             <android.support.v7.widget.Toolbar
             .... /> 

         </android.support.design.widget.AppBarLayout>

         <LinearLayout
         .... /> <!-- main content of this Acitivity-->

    </android.support.design.widget.CoordinatorLayout>  

    <android.support.design.widget.NavigationView
      .... /> 
</android.support.v4.widget.DrawerLayout>

Activity.java:

public void dashboard(MenuItem item) {
    Bundle bundle = new Bundle();
    bundle.putString("fragment", Constant.DASHBOARD_FRAGMENT);
    UtilityClass.newActivity(this, NavigationActivity.class, bundle);
}

And handling the call on Navigation Activity. It is doing the task but code isn't re-usable

  1. Create a separate layout file for Navigation and include it in the Activity. But, this is replacing the main content. Here only included Navigation is visible.

Is there any other way to do it?

4条回答
姐就是有狂的资本
2楼-- · 2019-06-13 19:22

Downvoters - here the solution is..

  1. Create an xml file which will have DrawerLayout and NavigationView (one can use the xml given in Question, without the main content) - navigation.xml
  2. As suggested in many answers "create a BaseActivity which extends AppCompatActivity. And inflate navigation.xml.

    public class BaseActivity extends AppCompatActivity {  
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {  
    
            super.onCreate(savedInstanceState);
            View view = View.inflate(this, R.layout.navigation, null);
    
            // view declarations
            DrawerLayout drawer = (DrawerLayout) view.findViewById(R.id.drawer_layout);
            NavigationView navigationView = (NavigationView) view.findViewById(R.id.nav_view);
            ...... }}
    
  3. In whichever Activity you wanna use this NavigationMenu, extend BaseActivity for that class.

    GraphActivity extends BaseActivity { .... }
    
  4. In GraphActivity.xml add the NavigationMenu code. You can't just include the navigation.xml it will disable the current xml widgets.

  5. Done!

查看更多
唯我独甜
3楼-- · 2019-06-13 19:28

Try this:

public class MainActivity extends BaseActivity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_describtion);
        getLayoutInflater().inflate(R.layout.activity_main, frameLayout);
        mDrawerList.setItemChecked(position, true);
    }
查看更多
仙女界的扛把子
4楼-- · 2019-06-13 19:28

NavigationDrawer is depricated....use something else for it is not much comfortable to use.

查看更多
我想做一个坏孩纸
5楼-- · 2019-06-13 19:31

Plz Don't use it this way

Instead use Google recommended MasterDetailFlow Design

This is MasterDetailFlow

You can read how to implement this on

https://inducesmile.com/android/android-fragment-masterdetail-flow-tutorial-in-android-studio/

查看更多
登录 后发表回答