我结合了Roger Garzon Nieto和sohailaziz 的答案。我的应用程序有一个 MainActivity,以及加载到其中的片段 A、B、C。我的“家”片段(A)实现了 OnBackStackChangedListener,并检查了 backStack 的大小;如果小于 1,则隐藏 UP 按钮。片段 B 和 C 总是加载返回按钮(在我的设计中,B 从 A 启动,C 从 B 启动)。MainActivity 本身只是在 UP 按钮点击时弹出 backstack,并具有显示/隐藏按钮的方法,片段调用:
主要活动:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
getSupportFragmentManager().popBackStack();
return true;
}
return super.onOptionsItemSelected(item);
}
public void showUpButton() { getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
public void hideUpButton() { getSupportActionBar().setDisplayHomeAsUpEnabled(false); }
fragmentA(实现 FragmentManager.OnBackStackChangedListener):
public void onCreate(Bundle savedinstanceSate) {
// listen to backstack changes
getActivity().getSupportFragmentManager().addOnBackStackChangedListener(this);
// other fragment init stuff
...
}
public void onBackStackChanged() {
// enable Up button only if there are entries on the backstack
if(getActivity().getSupportFragmentManager().getBackStackEntryCount() < 1) {
((MainActivity)getActivity()).hideUpButton();
}
}
片段B,片段C:
public void onCreate(Bundle savedinstanceSate) {
// show the UP button
((MainActivity)getActivity()).showUpButton();
// other fragment init stuff
...
}