假设我有一个以编程方式添加片段的活动:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
返回前一个可见片段的最佳方法是什么?
我发现Android中按钮点击的触发后退按钮功能,但我认为模拟后退键事件不是正确的方法(我也不能让它工作):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
调用finish()只是关闭我不感兴趣的活动。
还有更好的办法吗?
要使该片段再次出现,只需将该片段添加到backstack,你想要回来按下,例如:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fragment = new LoginFragment();
//replacing the fragment
if (fragment != null) {
FragmentTransaction ft = ((FragmentActivity)getContext()).getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.addToBackStack("SignupFragment");
ft.commit();
}
}
});
在上面的情况下,当按钮按钮被按下时,我打开LoginFragment,现在用户在SignupFragment中。因此,如果调用addToBackStack(TAG),其中TAG = "SignupFragment",那么当在LoginFragment中按下返回按钮时,我们将返回到SignupFragment。
编码快乐!
当你想关闭应用程序时,当你在主片段中向后按下时,这个解决方案非常适合基于底部栏的片段导航。
另一方面,当你打开二级片段(片段中的片段),在我的代码中定义为“DetailedPizza”,它将返回主片段的先前状态。干杯!
内部活动的背面按下放这个:
Fragment home = getSupportFragmentManager().findFragmentByTag("DetailedPizza");
if (home instanceof FragmentDetailedPizza && home.isVisible()) {
if (getFragmentManager().getBackStackEntryCount() != 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
} else {
//Primary fragment
moveTaskToBack(true);
}
然后像这样启动另一个片段:
Fragment someFragment = new FragmentDetailedPizza();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container_body, someFragment, "DetailedPizza");
transaction.addToBackStack("DetailedPizza");
transaction.commit();