【问题标题】:Do I have to set views to null in `onDestroyView()` for Fragments when used inside a ViewPager?在 ViewPager 中使用时,是否必须在 Fragments 的`onDestroyView()` 中将视图设置为 null?
【发布时间】:2017-08-03 13:14:50
【问题描述】:

如果我有一个 FragmentStatePagerAdapter 和很多 Fragments 像这样:

public class MyFragment extends Fragment {
    View myView;

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState {
        myView =  view.findViewById(R.id.my_view);
    } 
}

现在假设我滚动到其他页面...这是否会泄漏屏幕外其他页面的破坏视图(因为我有它们的参考 - myViews)?

这样做有帮助吗:

@Override
public void onDestroyView() {
    myView = null;
}

【问题讨论】:

    标签: android android-fragments android-viewpager android-lifecycle fragment-lifecycle


    【解决方案1】:

    不需要。 FragmentStatePagerAdapter 负责自动销毁 Fragment。由于 myView 引用位于 Fragment 内部并且它不是静态的,因此它也会被销毁。

    FragmentStatePagerAdapter 文档:

    https://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html

    当页面对用户不可见时,它们的整个片段可能 销毁,只保留该片段的保存状态

    请注意,默认情况下,这会在内存中保存 3 个片段(如果可用)而不会破坏。当前正在屏幕上显示的一个,左侧的一个和右侧的一个到当前片段。您可以自定义该计数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 2011-01-14
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多