【问题标题】:How can I share a navigation drawer between multiple activities?如何在多个活动之间共享一个导航抽屉?
【发布时间】:2016-04-19 10:56:08
【问题描述】:

您好,我正在为高中毕业做一个学校项目。该项目由一个 Android 应用程序组成,该应用程序具有 MainActivity 和 Navigation Drawer。 现在,我已经学习了数千个关于这个论点的问题,但所有的答案都是关于使用片段的。我不想使用 Fragment,那么如何在不同的 Activity 之间共享 Navigation Drawer?

注意:1) 我使用的是 Android Studio 提供的库存导航抽屉。

2) 我不想共享 MainActivity 的 Toolbar,只想共享 Navigation Drawer。

谢谢。

【问题讨论】:

  • 那么您在每个活动中都包含抽屉及其点击监听器
  • 为什么你不想使用 Fragment,即使它为这种事情提供了非常灵活的实现,也推荐了这样做的方式。

标签: java android android-activity android-navigation


【解决方案1】:

您需要使用 Drawer 创建 BaseActivity,所有子活动都将扩展该 BaseActivity

public class BaseActivity extends AppCompatActivity  {    
    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(R.layout.activity_base);
        // Base activity view with navigation drawer

        mainContener = (RelativeLayout) findViewById(R.id.mainContener);
        // MainCOntener where you want to add your child activity view
        // with toolbar and all
        getLayoutInflater().inflate(layoutResID, mainLayout);


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);


        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setOnClickListener(this);

        findViewById(R.id.linearLayout_home).setOnClickListener(this);
        ...
        ...

        getDrawerData();
    }

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_base);

    }


  }

并像这样创建子活动

public class Home extends BaseActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        }
    }

每当 setContentView(); 从子活动调用该视图(或类似 R.layout.home 的布局)将在 baseactivity 的 Contener(如 R.layout.base_activity )的 ViewGroup 中膨胀

更多信息 您可以使用 Google-IO 应用程序代码,他们也使用 BaseActivity 概念 https://github.com/google/iosched

【讨论】:

  • 您应该从基本活动中删除setContentView(R.layout.activity_base);,因为它会导致您的自定义setContentview 中的代码被执行两次
猜你喜欢
  • 2017-07-31
  • 2020-06-02
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多