相关疑难解决方法(0)

如何只保留第一个添加的片段在后栈(片段重叠)?

我想要实现的场景:

  1. 使用两个框架容器加载活动(有关项目列表和详细信息).
  2. 在应用启动时,在listFrame中添加listFragment,在detailsFrame容器中添加一些初始infoFragment.
  3. 浏览列表项而不将每个详细信息事务添加到后台堆栈(只想在堆栈中保留infoFragment).
  4. 一旦用户点击后退按钮(向后导航),他就会回退到初始信息片段,在发布时间添加内容.
  5. 如果顺序返回导航,则应用程序退出.

我的代码:

        protected override void OnCreate(Bundle savedInstanceState)
        {
...
            var listFrag = new ListFragment();
            var infoFrag = new InfoFragment();
            var trans = FragmentManager.BeginTransaction();
            trans.Add(Resource.Id.listFrame, listFrag);
            trans.Add(Resource.Id.detailsFrame, infoFrag);
            trans.Commit();
...
        }

        public void OnItemSelected(int id)
        {
            var detailsFrag = DetailFragment.NewInstance(id);
            var trans = FragmentManager.BeginTransaction();
            trans.Replace(Resource.Id.detailsFrame, detailsFrag);
            if (FragmentManager.BackStackEntryCount == 0)
                {
                    trans.AddToBackStack(null);
                }
            trans.Commit();
        }
Run Code Online (Sandbox Code Playgroud)

我的问题:

在按下后退按钮后,infoFrag与之前的detailFrag重叠!为什么?

android

9
推荐指数
3
解决办法
2万
查看次数

用新堆栈替换片段后栈

我正在尝试使用基于通过网络连接返回的一些信息生成的片段来完全替换片段后备栈.我首先将后端堆栈弹出到我想要的位置(工作正常......但是为了简单起见,我会说我弹出到根目录),然后我尝试构建并应用这样的片段堆栈:

ArrayList<JSONObject> crumbsOut = new ArrayList<JSONObject>(count);

//.... pop the back stack to a certain point

//replace entire nav. backstack
final FragmentTransaction transaction = this.getActivity().getSupportFragmentManager().beginTransaction();
for(int i = 0; i<count; i++)
{
  final JSONObject item = crumbsOut.get(i);
  final String id = item.getString("id");

  FolderFragment currentFolder = new FolderFragment();//fragment displays folder contents
  Bundle args = new Bundle();
  args.putString(DATA_ITEM_ID_KEY, id);
  args.putString(DATA_ITEM_NAME_KEY, item.getString("displayname"));
  currentFolder.setArguments(args);

  transaction.replace(R.id.MasterContainer, currentFolder);
  transaction.addToBackStack(id);
}

// Commit the transaction
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

当我运行它时,最顶层的FolderFragment正确显示,但当我点击后退按钮(或弹出堆栈)时,视图将恢复到上述代码运行之前的那一刻(即不是回到堆栈中我用循环创建的新片段,我在尝试添加/创建此堆栈之前返回到状态.

如果它有帮助,我在我的项目中使用Android兼容包.

请帮忙.谢谢

java android android-fragments

1
推荐指数
1
解决办法
4581
查看次数

标签 统计

android ×2

android-fragments ×1

java ×1