Android 在UI片段重新创建期间,是否不再需要对headless片段调用setTargetFragment?
使用无头片段技术(fragment withAndroid 在UI片段重新创建期间,是否不再需要对headless片段调用setTargetFragment?,android,android-fragments,Android,Android Fragments,使用无头片段技术(fragment withsetRetainedInstance(true))让长时间运行的任务处理UI更新是很常见的 我正在使用支持库 许多年前,当重新创建UIFragment时,以下代码片段是必不可少的,以确保headless fragment引用了最新的UIFragment实例 // UIFragment is having configuration change. // UIFragment is being re-created. // Make sure hea
setRetainedInstance(true)
)让长时间运行的任务处理UI更新是很常见的
我正在使用支持库
许多年前,当重新创建UIFragment
时,以下代码片段是必不可少的,以确保headless fragment引用了最新的UIFragment
实例
// UIFragment is having configuration change.
// UIFragment is being re-created.
// Make sure headlessFragment is having latest instance of UIFragment.
headlessFragment.setTargetFragment(this, 0);
然而,今天当我使用最新的支持库v7:25.0.0
重新测试代码时,我意识到这样的代码不再是必需的。我可以用英文写
public class UIFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
headlessFragment = (HeadlessFragment)fm.findFragmentByTag(HEADLESS_FRAGMENT);
if (headlessFragment == null) {
// This happens during UIFragment first-time creation.
headlessFragment = HeadlessFragment.newInstance();
headlessFragment.setTargetFragment(this, 0);
fm.beginTransaction().add(headlessFragment , HEADLESS_FRAGMENT).commitAllowingStateLoss();
} else {
// UIFragment is being created.
//
// Event without calling headlessFragment.setTargetFragment,
// headlessFragment.getTargetFragment will *magically*
// return latest instance of UIFragment.
}
}
}
首先,我怀疑,在最新的支持库中,headlessFragment.setTargetFragment
在重新创建UIFragment
的过程中被自动调用
但是,当我尝试通过使用一些日志覆盖headlessFragment.setTargetFragment
进行确认时,我意识到在UIFragment
重新创建期间没有调用它
请问,headlessFragment
如何才能神奇地获得最新的重新创建的UIFragment
,
public class UIFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
headlessFragment = (HeadlessFragment)fm.findFragmentByTag(HEADLESS_FRAGMENT);
if (headlessFragment == null) {
// This happens during UIFragment first-time creation.
headlessFragment = HeadlessFragment.newInstance();
headlessFragment.setTargetFragment(this, 0);
fm.beginTransaction().add(headlessFragment , HEADLESS_FRAGMENT).commitAllowingStateLoss();
} else {
// UIFragment is being created.
//
// Event without calling headlessFragment.setTargetFragment,
// headlessFragment.getTargetFragment will *magically*
// return latest instance of UIFragment.
}
}
}