java - ActionBar 后退按钮从内部 Fragment 完成 Activity

标签 java android android-fragments android-actionbar

我有一个带有包含后退按钮的 ActionBar 的 AppCompatActivity。我正在启动一个内部 Fragment 类,它在 Activity View 顶部打开一个 View 。硬件后退按钮关闭 Fragment,并且 Activity View 可见。但是,如果我在 Fragment View 中按下 ActionBar 上的后退按钮,应用程序将返回到 MainActivity( Activity 父级)。我想隐藏 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 后退按钮行为没有改变。没有记录日志消息~

我的错误,除了硬件后退按钮之外,此方法确实改变了行为。当尝试在 mFragmentManager 上尝试 getBackStackCount() 时,它导致了 NullPointerException

最佳答案

操作栏“后退”按钮实际上是向上按钮,根据 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);
}

关于java - ActionBar 后退按钮从内部 Fragment 完成 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305921/

相关文章:

java - 调用动态和隐式方法

java - 无法安装 GWT Toolkit for Eclipse?

java - 带有 servlet 3 规范的 Tomcat 6

java - 可扩展 ListView 刷新

android - 如何获取 Android 的 key 别名文件?我需要它吗?

android - 在按钮上单击如何增加计数器并在 TextView 中显示

android - 更改 ActionBar 标题

java - libgdx 中的手势检测器

安卓 : ViewFlipper Or ViewPager - Which is the better option?

android - 从右向左滑动过渡动画。 fragment -> Activity