【问题标题】:Android: BackStack Navigation in Master Detail flowAndroid:主详细信息流中的 BackStack 导航
【发布时间】:2013-11-12 13:54:24
【问题描述】:

我在理解 Android 主从模板中的向上导航时遇到问题。在单窗格模式下(对于智能手机),我使用 ItemListActivity 和 ItemListFragment。如果单击 ListFragment 中的项目,则会调用 ItemDetailFragment。现在,如果我在这个 ItemDetailFragment 中,我想通过单击 ActionBar 中的向上导航返回 ItemListFragment。

我是这样理解的:我只需要将我的 ItemDetailFragment 替换为 ItemListFragment,或者?

在我的 ItemDetailFragment 中,我使用以下代码:

//OnClick auf ActionBar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home: 
          FragmentTransaction trans = getFragmentManager().beginTransaction();
          trans.replace(R.id.fragment_container, new ItemListFragment()); 
          trans.commit();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

但是 ItemListFragment 不在调用 DetailFragment 之前的状态。我想要和以前一样的列表。

如果我点击后退按钮,正确的操作就完成了,那么我应该在向上导航中实现后退吗?

【问题讨论】:

    标签: android uinavigationbar fragment master-detail back-stack


    【解决方案1】:

    使用您当前的方法创建 ItemListFragment 的新实例,因此如果您想保存列表的状态,您需要自己完成。您需要简单地返回然后我建议为主页按钮调用onBackPressed() 方法。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home: 
              this.onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    

    【讨论】:

    • 感谢您的回复,我不得不将行更改为this.getActivity().onBackPressed();,因为我在片段中调用它。不幸的是,ItemListFragment 中有一个 NullpointerExcecption。我怎样才能准确地模拟后点击,因为它是这样工作的?你有什么想法吗?
    • 嗯,如果没有任何 ItemListFragment 或 logcat 日志代码,我很难找到导致 NullpointerException 的原因,但您可能想尝试 NavUtils 中的 navigateUpTo()。这里是文档developer.android.com/reference/android/support/v4/app/…, android.content.Intent),在这里您可以阅读更多关于 Back vs. Up 和一般导航的信息:developer.android.com/design/patterns/navigation.html
    • 是的,我不想发布我的大部分代码,因为导航可以使用后退按钮。所以我认为有一种简单的方法可以在我的 Fragment 中实现这一点。我会看看你的链接
    • 请考虑我的解决方案更像是“绕过”,然后是最佳选择,因为向上按钮不等于返回按钮。在您阅读我之前评论中链接中的指南后,您会有所不同:)
    【解决方案2】:

    据我了解你上面的描述..

    1)如果您在 Listfragment 项目中单击..,那么您将移至 ItemdetailFragment 因此您需要在 ListFragment 中添加 BackStack 操作。即如下

    transaction.addToBackStack(String);//to identify you can give any name 
    transaction.commit();  //then commit the transaction
    

    2)当你想从你的 ItemdetailFragment 移动到 ListFragment 在这种情况下,您正在使用后退按钮,您需要使用后退按钮 打电话

    popBackStack("towhich screen you want to move",0) //for more informationreferthis

    【讨论】:

    • 我添加了一个带有 "up" 的 backstack 并将这一行添加到我的 DetailFragment //OnClick auf ActionBar @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: android.app.FragmentManager man = getActivity().getFragmentManager(); man.popBackStack("up",0); return true; } return super.onOptionsItemSelected(item); } 但我仍然在 ListFragment 中有 NullPointer 异常:feed = (RSSFeed) getActivity().getIntent().getExtras().get("feed"); 所以 ListFragment 与以前不同,还是?
    • 你添加了addToBackStack("up");在你的 ListFragment 中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2019-12-09
    • 2013-05-12
    相关资源
    最近更新 更多