android - FragmentPagerAdapter - 避免重新创建 fragment 的 View

标签 android android-fragments

我注意到,当使用 FragmentPagerAdapter 时,与当前 fragment 不相邻的 fragment 的 View 被破坏(以及它们的 onPause() onStop() 方法被调用,奇怪的是 onSaveInstanceState(Bundle) 没有被调用),并且 onCreateView 被再次调用这些 fragment 。我的问题是我有一些 Timer 在这些 Fragment 上运行,重新创建它们是不可行的,因为这些计时器应该触发并更新相关的 Fragment UI。对于大屏幕,我使用了带有 LinearLayoutHorizo​​ntalScrollView,它可以完美地工作。

我的Activity中的相关代码:

private class MyPagerAdapter extends FragmentPagerAdapter implements TitleProvider {

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return mAddNewScenesFragment; 
        } else if (position == 1) {
            return mGlobalEventsFragment;
        } else {
            return mSceneFragments.get(position - 2);
        }
    }

    @Override
    public int getCount() {
        return mSceneFragments.size() + 2;
    }

    @Override
    public String getTitle(int position) {
        if (position == 0) {
            return "New scene"; 
        } else if (position == 1) {
            return mGlobalEventsFragment.getTitle();
        } else {
            return mSceneFragments.get(position - 2).getTitle();
        }
    }
}

fragment 是在 Activity 的 onCreate 方法上创建的,其他 fragment 可以在运行时添加到列表中,但即使不添加新 fragment ,当我滚动到第一个 fragment 时,第三个 fragment 也会被销毁。

有没有办法避免它们被破坏,或者我应该忘记 ViewPager 而对小屏幕也使用 Horizo​​ntalScrollView?我选择使用它是因为我认为“固定”行为确实有助于提高可用性。

最佳答案

下面的方法可以防止 fragment 被破坏:

mViewPager.setOffscreenPageLimit(no_of_fragments_to_be_kept_offscreen);

关于android - FragmentPagerAdapter - 避免重新创建 fragment 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8284732/

相关文章:

Android:将文本复制到 API < 11 的剪贴板

android - 在Android中,使用Gradle编译,如何在项目之间共享代码?

android - Android 从什么时候开始在崩溃后重新启动应用程序?

java - 如何从 MainActivity 中调用从 Android fragment 到 MainActivity 的信息获取?

android - 我的应用程序使用大量 Ram 并意外关闭

java - 使用 Fragment 强制关闭图库

android - 单击它时,多个 PlaceAutoCompleteFragment 会很快打开

android - FusedLocationProviderClient RemoveLocationUpdatesAsync 任务未完成

java - String.equals() 总是返回真

android - 旋转时调用 DatePickerDialog onDateSet