我创建示例应用以在用户启动特定活动时向用户显示一些数据,然后点击特定按钮,应用启动新片段(现在只将片段添加到活动中)我的问题是当用户点击时返回片段并删除活动并转到父活动。使用此代码执行此操作
android.support.v4.app.FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
fragmentManager.popBackStack();
当用户点击特定按钮片段并正确返回时,我也会在另一个动作中使用相同的代码 任何人都可以帮我解决这个问题
答案 0 :(得分:9)
在创建片段时将片段添加到后台,并覆盖活动中的onBackPressed
。
添加片段
FragmentManager mFragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.addToBackStack("tag of fragment");
ft.add("your container id", fragment);
ft.commit();
<强> onBackPress 强>
@Override
public void onBackPressed() {
if (mFragmentManager.getBackStackEntryCount() > 0)
mFragmentManager.popBackStackImmediate();
else super.onBackPressed();
}
答案 1 :(得分:2)
覆盖onBackPressed()并删除片段。片段的后台堆栈工作方式不同,因为它存储事务而不是片段所以不能弹回一个片段而是一个事务
答案 2 :(得分:1)
要删除只有片段,你必须在<div id="loadingIndicator" style="display:none;z-index:100;">
<img src="loading-big.gif" alt="" />
</div>
中添加该片段,这样当你按下它时,只弹出片段,它被添加到堆栈中
答案 3 :(得分:0)
这对我来说是有效的,可以处理片段中的片段中的背压来移除后台堆栈。
@Override
public void onResume() {
super.onResume();
if (getView() == null) {
return;
}
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(getActivity(), "Clicked Back", Toast.LENGTH_SHORT).show();
getActivity().finish();
return true;
}
return false;
}
});
}