首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带片段的actionbar up导航

带片段的actionbar up导航
EN

Stack Overflow用户
提问于 2012-10-26 20:21:00
回答 10查看 102.4K关注 0票数 93

我有一个带选项卡的动作栏/视图分页布局,有三个选项卡,分别是ABC。在选项卡C选项卡(片段)中,我添加了另一个片段,称为片段D。使用

代码语言:javascript
复制
 DFragment f= new DFragment();
 ft.add(android.R.id.content, f, "");
 ft.remove(CFragment.this);
 ft.addToBackStack(null);
 ft.commit();

我修改了DFragment的onResume中的actionbar来添加按钮:

代码语言:javascript
复制
ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);

现在,在DFragment中,当我按下硬件(电话)后退按钮时,我返回到选择了CFragment的原始选项卡式(ABC)布局。如何使用actionbar up按钮实现此功能?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-12-02 00:45:02

实现OnBackStackChangedListener并将此代码添加到片段活动中。

代码语言:javascript
复制
@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;
}
票数 189
EN

Stack Overflow用户

发布于 2012-11-01 02:48:07

这样啊,原来是这么回事。只需在托管活动中重写onOptionsItemSelected并弹出backstack,例如

代码语言:javascript
复制
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);,如下面的答案所述。

票数 43
EN

Stack Overflow用户

发布于 2014-07-22 11:31:02

如果您有一个父活动,并希望此向上按钮作为后退按钮,则可以使用以下代码:

将此代码添加到主活动类的onCreate中

代码语言:javascript
复制
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:

代码语言:javascript
复制
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            getSupportFragmentManager().popBackStack();
            return true;
     ....
 }

我通常一直在用这个,而且看起来很合法。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13086840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档