我想要实现的场景:
我的代码:
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重叠!为什么?
我正在尝试使用基于通过网络连接返回的一些信息生成的片段来完全替换片段后备栈.我首先将后端堆栈弹出到我想要的位置(工作正常......但是为了简单起见,我会说我弹出到根目录),然后我尝试构建并应用这样的片段堆栈:
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兼容包.
请帮忙.谢谢