Android studio - tabbed activity 如何将片段重置为默认视图?

Android studio - tabbed activity how to reset fragment to default view?

我有一个片段,其中包含三个(默认)图像,当用户单击它们时,它们将更改为另一个。但是当我滑动到另一个片段并返回到带有图像的片段时,没有像开始时那样默认的片段。当我滑动两次时,我将传递到另一个片段(与原始图像的距离是 2 个片段)图像被重置为默认值。我试图从 ViewPager 实现 setOffscreenPageLimit() 并将其设置为 1,但重置片段中的视图时的最小值 "length" 是 2。如何在滑动操作后手动将该图像更改为默认值?谢谢。

编辑:我认为 onResume() 在这里不起作用的问题:Fragment onResume not called

但我不知道那是什么意思:/我有三个 classes FragmentController.class、PagerAdapter.class 和 class 的特定片段,例如 FirstFragment.class .我不知道如何将这些 class 连接在一起。

检查您是否在适配器的 getItem() 方法中创建了片段,并且没有保留对该片段的任何引用(必要时仅包含 WeakReferences),否则无法销毁片段。

编辑:

只有当您在第三个片段时才会卸载第一个片段,因为 setOffscreenPageLimit 至少为 1,因此 viewpager 总是加载所选片段两侧的片段。

您可以使用以下代码更新适配器以提供 getFragment(position) 方法:

private HashMap<Integer, WeakReference<Fragment>> fragmentReferences = new HashMap<>();

@Override
public Fragment getItem(int position) {
    Fragment fragment;
    switch (position) {
        case 0:
            fragment = FirstFragment.newInstance();
            break;
        // etc
    }
    fragmentReferences.put(position, new WeakReference<>(fragment));
    return fragment;
}

public Fragment getFragment(int position) {
    WeakReference<Fragment> ref = fragmentReferences.get(position);
    return ref == null ? null : ref.get();
}

之后就可以获取选中的fragment,在选中页面时从第一个fragment调用你想要的方法:

viewPager.setOnPageChangeListener(new OnPageChangeListener() {
    @Override
    public void onPageSelected(int currentPage) {
        if (currentPage == 0) {
            Fragment firstFragment = adapter.getFragment(0);
            if (firstFragment != null) {
                // This method resets the images of the first fragment
                ((FirstFragment) firstFragment).reset();
            }
        }
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        // Do nothing
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        // Do nothing
    }
});