多个活动中的导航抽屉

时间:2017-03-28 05:31:06

标签: android android-fragments android-activity navigation-drawer

我知道这个问题已被多次询问过。但我的担忧是不同的。

使用Mr. Tamada Tutorial我已在NavigaionActivity中创建了fragments和多个FrameLayout来替换。它工作正常。

现在,在片段中选择任何选项后,另一个活动将被打开。

我想在该活动中使用相同的导航菜单。

  

导航视图 - 片段 - 活动(此处显示导航视图)

我尝试了什么:

  1. 使用xml代码在该活动中显示Navigation view。 (DrawerLayout,CoordinatorLayout,AppBarLayout等)

    然后在Activity.java中,点击转移到导航活动的菜单项。

  2. 代码

    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);
    }
    

    处理导航活动上的调用。它正在执行任务,但代码不可重复使用

    1. 为Navigation创建单独的布局文件,并将其包含在Activity中。但是,这正在取代主要内容。此处仅包含导航可见。
    2. 还有其他办法吗?

4 个答案:

答案 0 :(得分:1)

Downvoters - 这里的解决方案是......

  1. 创建一个xml文件,其中包含DrawerLayoutNavigationView(可以使用问题中给出的xml,不含主要内容) - navigation.xml
  2. 正如许多答案中所建议的那样,“创建一个extends AppCompatActivity的基础活动。并且膨胀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. 在您想要使用此Activity的任何NavigationMenu中,为该类扩展BaseActivity。

    GraphActivity extends BaseActivity { .... }
    
  4. GraphActivity.xml中添加NavigationMenu代码。您不能只包含navigation.xml它将禁用当前的xml小部件。

  5. 完成!

答案 1 :(得分:1)

试试这个:

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);
    }

答案 2 :(得分:0)

Plz不要这样使用

而是使用Google推荐的 MasterDetailFlow Design

This is MasterDetailFlow

您可以在

上阅读如何实现此功能

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

答案 3 :(得分:-4)

NavigationDrawer已被删除....使用其他东西因为它使用起来不太舒服。