按下时仅删除片段

时间:2016-08-11 10:19:05

标签: android android-fragments

我创建示例应用以在用户启动特定活动时向用户显示一些数据,然后点击特定按钮,应用启动新片段(现在只将片段添加到活动中)我的问题是当用户点击时返回片段并删除活动并转到父活动。使用此代码执行此操作

android.support.v4.app.FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
fragmentManager.popBackStack();

当用户点击特定按钮片段并正确返回时,我也会在另一个动作中使用相同的代码 任何人都可以帮我解决这个问题

4 个答案:

答案 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;
        }
    });
}