为什么Actionbar标题会在按下的硬件后退按钮上显示backstack标题?

时间:2015-05-20 19:44:47

标签: android android-fragments android-activity

我试图更改活动的标题,我从片段中进入活动,所以当我点击硬件后退按钮时,标题不会改为我在那次活动中提供的,即

this.setTitle("Something");

我也试过

setTitle("Something");

更新

当我使用下面提到的代码时,我遇到了一个问题,我在mainActivity中分配的标题保留在所有页面中,因此在frgment getActivity().setTitle("");似乎在这种情况下无用,所以代替使用下面提到的代码改变标题,即使用getsupportactionbar.settitle("")更改操作栏标题,这是一种简单的方法。

我能以任何方式知道某项活动是否来自system back button后退状态吗?

5 个答案:

答案 0 :(得分:2)

您可以使用 onResume()方法

来处理这种情况
//...
@Override
onResume(){
   super.onResume();
   this.getActionBar().setTitle("Something");
}

ı想想,这会对你有帮助。

答案 1 :(得分:0)

试试这个:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    ActionBar ab = getActionBar();
    ab.setTitle("My Title");
    ab.setSubtitle("sub-title"); 
  }

修改

对于SupportActionBar,请使用:

ActionBar actionBar = getSupportActionBar();

<强> EDIT2:

我用它来设置每个片段的标题

@Override
public void onResume() {
    super.onResume();
    // Set the title
    getActivity().getActionBar() //getSupportActionBar()
        .setTitle(R.string.fragment_title);
}

答案 2 :(得分:0)

如果您在更改时始终将片段添加到Backstack,则可以按如下方式覆盖backpress以始终获取您之前片段的标题:

@Override
public void onBackPressed() {
    int T= getFragmentManager().getBackStackEntryCount();
    if (getFragmentManager().getBackStackEntryCount() == 0) {
        finish();
    }
    else if (getFragmentManager().getBackStackEntryCount() == 1) {
        finish();
    }
    else {
        String tr = getFragmentManager().getBackStackEntryAt(T-2).getName();
        setTitle(tr);
        getFragmentManager().popBackStack();
    }
}

答案 3 :(得分:0)

如果您在科特林(Kotlin)发生这种情况,只需从导航图中的目标位置删除标签。

enter image description here

答案 4 :(得分:-1)

getSupportActionbar().setTitle("Your Title")

每当您想要更改标题时,都必须拨打此电话。

如果您在片段之间切换,请再次调用该方法并将其切换回旧标题。