我将我的Android应用程序移植到了蜂窝状态,然后为了使用碎片我做了一个大的重构.在我之前的版本中,当我按下Home按钮时,我曾经做过一次ACTIVITY_CLEAR_TOP以重置后台堆栈.
现在我的应用程序只是一个包含多个片段的Activity,因此当我按下Home按钮时,我只需替换其中的一个片段.如何清除,而不必使用我的背部栈startActivity与ACTIVITY_CLEAR_TOP标志?
我想要实现的场景:
我的代码:
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重叠!为什么?
我有一个活动,里面有一个片段A. 片段A在其内部嵌套了片段B. 我使用以下代码用C切换B:
getChildFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.move_left_in, R.anim.move_left_out,R.anim.move_right_in, R.anim.move_right_out)
.replace(R.id.container, fragmentC)
.addToBackStack("nested")
.commit();
Run Code Online (Sandbox Code Playgroud)
之后,我正在做
getChildFragmentManager().popBackStack();
Run Code Online (Sandbox Code Playgroud)
什么让我回到片段B.然后我用代码切换片段A和片段D.
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.move_up_in, R.anim.move_up_out, R.anim.move_down_in, R.anim.move_down_out)
.replace(R.id.fragment_holder, fragmentD)
.addToBackStack("fragments")
.commit();
Run Code Online (Sandbox Code Playgroud)
当A-> D交易上的动画正在播放时,B播放事务C-> B的动画,并通过弹出backstack获得相同的结果,为什么?