当Fragment失去焦点并重新获得AppCompatActivity的焦点时

时间:2015-09-07 07:42:10

标签: android android-fragments

我在AppCompatActivity添加片段。而且我想知道什么时候任何片段都会聚焦或失去焦点。例如,当添加新片段时,我想要一些代码告诉先前的片段,即他失去焦点。

我已经尝试了setUserVisibleHint()onHiddenChanged()方法,但两种方法都无效。

有人能告诉我怎么做。

1 个答案:

答案 0 :(得分:0)

感谢@ oriharel 提供了一个很好的解决方法来处理这种情况。这是代码:

在您的活动(MyActivity)中,添加此侦听器:

getSupportFragmentManager().addOnBackStackChangedListener(getListener());

(如你所见,我正在使用兼容包)。

getListener实现:

private OnBackStackChangedListener getListener()
{
    OnBackStackChangedListener result = new OnBackStackChangedListener()
    {
        public void onBackStackChanged() 
        {                   
            FragmentManager manager = getSupportFragmentManager();

            if (manager != null)
            {
                MyFragment currFrag = (MyFragment)manager.
                findFragmentById(R.id.fragmentItem);

                currFrag.onFragmentResume();
            }                   
        }
    };

    return result;
}

MyFragment.onFragmentResume()将在" 后退"之后调用。被压了。但有几点需要注意:

  1. 它假设您已将所有事务添加到backstack(使用FragmentTransaction.addToBackStack())

  2. 它将在每次堆栈更改时激活(您可以将其他内容存储在后端堆栈中,例如动画),这样您就可以获得多次调用相同的片段实例。

  3. 答案的原始来源here