首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onBackPressed() popBackStack问题

onBackPressed() popBackStack问题
EN

Stack Overflow用户
提问于 2014-12-27 19:05:34
回答 1查看 1.7K关注 0票数 1

我在SO上看到了很多弹出堆栈的问题,基于我的代码,我想要做的事情应该会起作用。

代码语言:javascript
复制
public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.content_frame, new MainFragment());
        ft.addToBackStack("Attend"); //here is the add to backstack
        ft.commit();

    }

这显示了我的主要片段在我的空白布局。

稍后,我有了一个onOptionsItemSelected,它启动了一个新的片段。

代码语言:javascript
复制
FragmentManager fm1 = getFragmentManager();
                FragmentTransaction ft1 = fm1.beginTransaction();
                ft1.replace(R.id.content_frame, new ServiceFragment());
                ft1.addToBackStack("ServiceTimes");
                ft1.commit();
                return true;

这个片段出现了。问题就从这里开始。我按后退按钮,希望返回到主片段。

代码语言:javascript
复制
@Override
public void onBackPressed() {
    FragmentManager fm = getFragmentManager();
    if(fm.getBackStackEntryCount() > 0) {
        Toast.makeText(getApplicationContext(),"popstack",Toast.LENGTH_SHORT).show();
        fm.popBackStackImmediate("Attend", fm.POP_BACK_STACK_INCLUSIVE);

    } else {
        Toast.makeText(getApplicationContext(),"Super",Toast.LENGTH_SHORT).show();
        super.onBackPressed();
    }
}

我添加了一个Toast弹出来告诉我发生了什么,当按下后退按钮时,我得到了一个空白的白色屏幕,上面有“pop堆栈”Toast消息(告诉我"if“语句是正确的)。当我再次点击它时,我会得到”超级“(同样也是我所期望的)。

我不明白为什么我的代码不返回到主要片段?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-27 19:14:07

需要记住的是,back堆栈包含的是事务而不是片段。

因为您使用的是POP_BACK_STACK_INCLUSIVE标志,所以当您单击back按钮时,名称为"Attend"的事务也会弹出(即取消)。因为这个事务以编程方式添加了第一个片段,所以您将返回到活动的初始状态(在容器中没有id content_frame的片段)。

适当的解决方案取决于您正试图实现的目标(可以添加多少片段,是否总是希望返回到后面按下的第一个片段,等等)。您可能需要考虑不将初始事务添加到后台堆栈。或者您可以添加它,但不使用包含的标志,并且只有当后台堆栈条目计数> 1时才使用自定义onBackPressed逻辑。

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

https://stackoverflow.com/questions/27670571

复制
相关文章

相似问题

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