【问题标题】:Providing up Navigation for new Toolbar in Navigation Drawer?为导航抽屉中的新工具栏提供导航?
【发布时间】:2018-03-20 17:07:56
【问题描述】:

我正在使用新的Toolbar,我的问题是如何为导航抽屉提供setDisplayHomeAsUpEnabled

通常当我使用旧的ActionBar by时,我会这样做,

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

但是当我在新的toolbar 中使用相同的内容时,它会说

方法调用 getSupportActionBar().setDisplayHomeAsUpEnabled(true);可能导致 Null 指针异常。

我应该知道如何在 Fragment 中实现上述目标,因为我现在正在使用 Fragment 进行重用。

【问题讨论】:

    标签: android android-fragments navigation-drawer android-toolbar appcompatactivity


    【解决方案1】:

    getSupportActionBar() 可能只是null

    通过检查 getSupportActionBar() 返回的内容来避免任何可能的错误:

    final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    final ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
    

    【讨论】:

    • 由于我使用新的工具栏,我必须在主题中声明NoActionBar。所以,我必须以不同的方式完成。这并不能真正解决我的问题。
    • 如果使用新的Toolbar,请务必致电setSupportActionBar(toolbar) developer.android.com/reference/android/support/v7/app/…
    • 我已经添加了该代码。那是在发布的代码行的上方。
    • 如果您检查它是否为null,则不会出现此错误。只需检查if actionBar != null...
    • 它不会引发 NPE 错误。它说'可以生产'。您可以在我的问题中看到该错误。关键是,它没有显示插入符号,因为我无法设置此代码。
    【解决方案2】:

    如果您使用的是 ActionBarActivity,那么您可以告诉 Android 将 Toolbar 用作当前代码的 ActionBar。

    对于片段的后退导航,请使用:

    ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
    

    确保您的片段被添加到后台堆栈使用:

    .addToBackStack("Tag")
    

    在您的片段交易中。

    如果您不使用 ActionBarActivity,请在工具栏中添加一个可绘制的后退箭头图标并使用:

    mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
    mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //What to do on back clicked
        }
    });
    

    【讨论】:

      【解决方案3】:

      这里有什么问题?如果您使用支持工具栏(xml 布局中的android.support.v7.widget.Toolbar)并且您忘记在getSupportActionBar().setDisplayHomeAsUpEnabled(true); 之前调用setSupportActionBar(mToolbar);,那么您当然会得到Null Pointer Exception。如果你设置它,那么没有什么可担心的......

      【讨论】:

        猜你喜欢
        • 2014-12-23
        • 2015-02-26
        • 2015-01-15
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 2019-09-15
        • 1970-01-01
        相关资源
        最近更新 更多