实际上问题是我只是加载一个片段(让我们调用片段-A )从导航抽屉现在片段-A调用虚拟活动,虚拟活动加载片段B 比片段B调用片段C 而片段-C调用片段-D ..
整体上图:
Fragment-A(call) - > Dummy Activity(load) - > fragment-B(call) - > fragment-C(call) - > fragment-D(call)
现在我对此提出了一些问题:
On Back
按下..
表示用户在片段D中而不是在后面按下,而不是片段-C加载,反之亦然但是当用户在Fragemnt-B上时调用On-back
键而不是片段A加载注意:
回购链接:Code link
答案 0 :(得分:0)
以上情况可以通过以下方式解决..
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
finish();
}
如果片段D中的按钮被调用,请调用该函数 getActivity()onBackPresses(); 它将完成当前的活动..
答案 1 :(得分:0)
您需要在backstack中添加片段,如下所示: -
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentA);
//No need to put fragment A in backstack
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentB);
ft.addToBackStack(null);
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentC);
ft.addToBackStack(null);
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentD);
ft.addToBackStack(null);
ft.commit();
现在,你所有的片段都在backstack中,所以如果你按回片段D然后会显示fragmentC,然后按下片段C中的Back,将显示片段B并按下片段B中的返回片段,片段A将会显示。
AS,你提到你在fragmentD中有一个特殊的按钮,在按下它时会把你带到片段A,所以在点击那个按钮时执行这个代码: -
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}