为导航抽屉中的新工具栏提供导航?

时间:2015-05-07 13:17:33

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

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

通常我在使用旧的ActionBar时,

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

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

  

方法调用   getSupportActionBar()setDisplayHomeAsUpEnabled(真)。可能会导致无效   指针异常。

enter image description here

我应该知道如何在Fragment中实现上述功能,因为我现在正在使用Fragment来重复使用。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果您使用的是ActionBarActivity,那么您可以告诉Android使用工具栏作为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
    }
});

答案 2 :(得分:0)

这是什么问题?如果您使用支持工具栏(xml布局中为android.support.v7.widget.Toolbar)而忘记在setSupportActionBar(mToolbar);之前致电getSupportActionBar().setDisplayHomeAsUpEnabled(true);,那么您将获得Null Pointer Exception。如果你设置它,那么没有什么可担心的......