我有一个选项卡式Actionbar/viewpager布局,其中有三个选项卡,分别为 A B C 。在选项卡 C 选项卡(片段)中,我添加了另一个片段,即片段 D 。和

 DFragment f= new DFragment();
 ft.add(android.R.id.content, f, "");
 ft.remove(CFragment.this);
 ft.addToBackStack(null);
 ft.commit();

我在DFragment的onResume中修改操作栏以添加按钮:
ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);

现在在DFragment中,当我按硬件(电话)“后退”按钮时,我返回到原始的Tabbed(ABC)布局,并选择了CFragment。如何通过操作栏上按钮实现此功能?

最佳答案

实现OnBackStackChangedListener并将此代码添加到您的Fragment Activity中。

@Override
public void onCreate(Bundle savedInstanceState) {
    //Listen for changes in the back stack
    getSupportFragmentManager().addOnBackStackChangedListener(this);
    //Handle when activity is recreated like on orientation Change
    shouldDisplayHomeUp();
}

@Override
public void onBackStackChanged() {
    shouldDisplayHomeUp();
}

public void shouldDisplayHomeUp(){
   //Enable Up button only  if there are entries in the back stack
   boolean canGoBack = getSupportFragmentManager().getBackStackEntryCount()>0;
   getSupportActionBar().setDisplayHomeAsUpEnabled(canGoBack);
}

@Override
public boolean onSupportNavigateUp() {
    //This method is called when the up button is pressed. Just the pop back stack.
    getSupportFragmentManager().popBackStack();
    return true;
}

10-08 07:18