ActionBar返回按钮从内部片段完成活动

时间:2017-07-25 14:14:14

标签: java android android-fragments android-actionbar

我有一个带有后退按钮的ActionBar的AppCompatActivity。我正在启动一个内部Fragment类,它在Activity视图的顶部打开一个View。硬件后退按钮关闭片段,活动视图可见。但是,如果我在Fragment视图中按下ActionBar上的后退按钮,应用程序将返回到MainActivity,即Activities父级。我想要隐藏ActionBar,或者理想地给它与硬件按钮相同的行为,因为这显然是用户烦人的行为。我尝试在我的Activity中创建一个ActionBar实例,比如这个

ActionBar actionBar = getActionBar();
actionBar.setHomeAsUpEnabled(true);

这在运行时给了我NullPointerException。我已经搜查过并且感到难过。

还试过这个,其中mFragmentManager在与Fragment类开始事务之前有.addToBackStack()。

@Override
public void onBackPressed() {

    int count = mFragmentManager.getBackStackEntryCount();

    if (count == 0) {
        super.onBackPressed();
        //additional code
    } else {
        mFragmentManager.popBackStack();
    }
    Log.i(LOG_TAG, "onBackPressed. Count = " + count);
}

〜没有错误,但ActionBar后退按钮的行为没有改变。没有记录日志消息〜

我的错误,这个方法确实改变了行为但是对于硬件后退按钮。在NullPointerException上尝试getBackStackCount()时,它会导致mFragmentManager

2 个答案:

答案 0 :(得分:1)

操作栏"返回"按钮实际上是 Up 按钮,根据Google,它应该与硬件后退按钮的行为不同:https://developer.android.com/training/design-navigation/ancestral-temporal.html

话虽这么说,你可以拦截这个按钮上的触摸并随心所欲地做任何事情。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        // your code here
    }

    return super.onOptionsItemSelected(item);
}

答案 1 :(得分:0)

请尝试使用getSupportActionBar()