当片段在屏幕上时如何监听

时间:2015-11-09 23:24:24

标签: android android-fragments fragment-backstack

我需要的是一个特定片段的onResume方法(因为它适用于活动)。我正在将片段(假设片段A)添加到后台堆栈,并从片段A打开另一个片段(片段B)(再次添加到后台堆栈)。我想在片段B关闭且片段A是时更新工具栏再次在屏幕上。我希望onCreateView被调用但是当我弹出片段B时它没有被调用。我也尝试将OnBackStackChangedListener添加到片段A但是当后栈改变时我无法跟踪屏幕上的哪个片段

所以我的问题是当我回到片段A时如何调用onCreateView。如果这不是一个好习惯,我还能如何跟踪这个事件?

修改

我正在使用此代码显示新片段:

getSupportFragmentManager().beginTransaction()
        .add(R.id.content, fragment)
        .addToBackStack(tag)
        .commit();

我应该以某种方式更改它以使onCreateView被调用吗?因为我在现有片段A上添加了新的片段B (当我在屏幕上时,我甚至可以点击片段A中的按钮),当我弹出片段B时,片段没有任何变化A的情况。

3 个答案:

答案 0 :(得分:1)

在Fragment中覆盖此方法并检查布尔值

   @Override
   public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        //Log.e("setUserVisibleHint", "isVisibleToUser " + isVisibleToUser);

   }

根据isVisibleToUser布尔值

,只要片段在此方法中可见/隐藏,就需要执行您需要执行的代码

答案 1 :(得分:0)

您是否以这种方式尝试OnBackStackChangedListener?

public class BlankFragment2 extends Fragment {


    public BlankFragment2() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                if(getFragmentManager()==null)
                    return;
                Fragment fr = getFragmentManager().findFragmentById(R.id.container)//id of your container;

                if (fr instanceof BlankFragment2) {
                    //On resume code goes here
                }
            }
        });
        return inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
    }
}

答案 2 :(得分:0)

我希望这个解决方案有效。

1)在您的活动

上填写/调用 addOnBackStackChangedListener
getSupportFragmentManager().addOnBackStackChangedListener(backStacklistener);

2)在您的活动

中定义 backStacklistener
FragmentManager.OnBackStackChangedListener backStacklistener = new FragmentManager.OnBackStackChangedListener() {
        public void onBackStackChanged() {
            FragmentManager manager = getSupportFragmentManager();
            if (manager != null) {
                Fragment fragment = manager.findFragmentById(R.id.fragment);
                if(fragment instanceof OutboxFragment) {
                    OutboxFragment currFrag = (OutboxFragment) fragment;
                    currFrag.onFragmentResume();
                }
            }
        }
    };

3)在片段上提供您想要触发的方法。在这种情况下,我创建名为 onFragmentResume()

的方法
public void onFragmentResume() {
    MainActivity activity = (MainActivity) getActivity();
    activity.showFab();
    // or do another thing here
}
祝你好运!