我有一个带选项卡的动作栏/视图分页布局,有三个选项卡,分别是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来添加按钮:
ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);
现在,在DFragment中,当我按下硬件(电话)后退按钮时,我返回到选择了CFragment的原始选项卡式(ABC)布局。如何使用actionbar up按钮实现此功能?
发布于 2013-12-02 00:45:02
实现OnBackStackChangedListener
并将此代码添加到片段活动中。
@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;
}
发布于 2012-11-01 02:48:07
这样啊,原来是这么回事。只需在托管活动中重写onOptionsItemSelected并弹出backstack,例如
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
return true;
}
break;
}
}
return super.onOptionsItemSelected(item);
}
在onBackStackChanged()
中调用getActionBar().setDisplayHomeAsUpEnabled(boolean);
和getActionBar().setHomeButtonEnabled(boolean);
,如下面的答案所述。
发布于 2014-07-22 11:31:02
如果您有一个父活动,并希望此向上按钮作为后退按钮,则可以使用以下代码:
将此代码添加到主活动类的onCreate中
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
int stackHeight = getSupportFragmentManager().getBackStackEntryCount();
if (stackHeight > 0) { // if we have something on the stack (doesn't include the current shown fragment)
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} else {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setHomeButtonEnabled(false);
}
}
});
然后像这样添加onOptionsItemSelected:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getSupportFragmentManager().popBackStack();
return true;
....
}
我通常一直在用这个,而且看起来很合法。
https://stackoverflow.com/questions/13086840
复制相似问题