来自导航抽屉的onBackPress()

时间:2017-11-09 11:37:18

标签: android android-fragments

我有一个导航抽屉活动,其中有四个片段都工作正常。我还有另一个活动是我应该调用带有导航抽屉活动的片段。我已经修复了从另一个单独的活动中调用片段的问题。真正的问题就在这里,如果我从导航抽屉活动中的一个fragmentB按回来它会回到主片段A再次如果我从fragmentA按回来它会显示实际应该离开应用程序的fragmentB它不应该显示fragmentB。

我在导航抽屉活动中尝试了很多内容,例如:getActivity().onBackPressed()和覆盖onBackPressed()

另外一件事,如果我添加getActivity().onBackPressed()它的工作正常...问题..它影响fragmentB,fragmentB的onCreateView()没有被调用,它只是显示片段的视图和使用以前的捆绑而不是更新。

这是我的代码......

例如,将其保留为活动A:

从活动A当我从设备按回来并按下前一个按钮时..因为我不能直接从不同的活动调用导航抽屉片段我正在传递导航活动的意图,并从那里到片段。

Intent intent = new Intent(getApplicationContext(), Navigation.class);
            intent.putExtra("SELECTEDVALUE", 2);//1 for fragament A use 2 for fragment B
            intent.putExtra("StorePos",position);
            startActivity(intent);
            finish();

这是我的导航抽屉活动代码:

try {
        Bundle extras = savedInstanceState != null ? savedInstanceState : getIntent().getExtras();
        int selectedValue = extras.getInt("SELECTEDVALUE");
        position = extras.getInt("StorePos");

        if(selectedValue == 2)
        {
            Bundle bundle = new Bundle();
            bundle.putInt("StorePosition", position);
            CreateNewOrder createNewOrder = new CreateNewOrder();
            createNewOrder.setArguments(bundle);
            FragmentTransaction tx2 = getSupportFragmentManager().beginTransaction();
            tx2.replace(R.id.content_frame, createNewOrder);
            tx2.commit();                
        }

    }
    catch (Exception e)
    {

    }

CreateNewOrder()是导航活动中的片段,这是来自CreateNewOrder的按下后退按钮的代码:

view.setFocusableInTouchMode(true);
    view.requestFocus();
    view.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                FragmentTransaction tx = getFragmentManager().beginTransaction();
                tx.replace(R.id.content_frame, new Dashboard());
                tx.commit();
                return true;
            }
            return false;
        }
    });

1 个答案:

答案 0 :(得分:0)

最简单的方法就是保留一个静态变量来保存当前正在运行的活动,然后在片段内的背压上检查这个变量并编写在backpress上应该发生的事情