在将其添加到backstack之前执行片段中的方法

时间:2016-09-28 07:10:03

标签: android android-fragments

我有多个片段,我可以在它们之间切换,我的问题是如何在进入backstack之前在片段中执行方法。 如果我在片段OnPause()OnStop()中执行某个方法,我的活动会立即关闭所有片段。从一个片段切换到另一个片段的代码是:

  public void switchFrgFromFrg(Fragment fragment, String tag, boolean isAddedToBackStack, int idContainer) {
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.replace(idContainer, fragment, tag);
    if (isAddedToBackStack) {
        fragmentTransaction.addToBackStack(tag);
    }
    fragmentTransaction.commit();
   }

任何帮助都是相关的。

2 个答案:

答案 0 :(得分:1)

只有在调用保留它的活动onResume()onPause()时,才会调用您的片段onResume()onPause()。它们与活动紧密耦合,这就是你的片段关闭的原因。我鼓励你实现一个后退键监听器:

 private void doBackActionListener(View view){
    view.setFocusableInTouchMode(true);
    view.requestFocus();

    view.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    //execute code

                    //then do standart go back  action
                    getActivity().onBackPressed();
                    return true;
                }
            }
            return false;
        }
    });
}

您将在onCreateView()中对此进行调整,并将膨胀的视图作为参数传递。

答案 1 :(得分:0)

  

如何在片段进入backstack

之前执行片段中的方法

当片段可见时,您可以根据需要执行任意数量的方法

  

如果我在片段OnPause()OnStop()中执行某些方法,我的活动会立即关闭所有片段。

这是因为您的代码中出现了一些Exception。最好在你的问题中显示你的控制台(日志信息)。