Android:主详细信息流中的BackStack导航

时间:2013-11-12 13:54:24

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

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

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

在我的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之前的状态。我想拥有和以前一样的名单。

如果单击后退按钮,则表示操作正确,那么我应该在向上导航中实现后退点击吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

  

据我所知,上面的描述......

     

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 information referthis