Android studio - 选项卡式活动如何将片段重置为默认视图?

时间:2017-08-31 16:33:36

标签: android android-activity view reset tabbed

我有一个片段,其中有三个(默认)图像,当用户点击它们时,它们将变为另一个。但是,当我滑动到另一个片段并返回到带有图像的片段时,开始时没有默认片段。当我滑动两次以便我将传递给另一个片段(距离原始图像的距离是2个片段)图像被重置为默认值。我试图从ViewPager实现setOffscreenPageLimit()并将其设置为1,但重置片段中的视图时的最小“长度”是2.如何在滑动操作后手动将图像更改为默认值?谢谢。

修改:我认为onResume()无法解决原因的问题:Fragment onResume not called

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

1 个答案:

答案 0 :(得分:0)

检查您是否在适配器的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();
}

之后,您可以获取所选片段,并在选择页面时从第一个片段调用所需的方法:

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
    }
});