我有一个片段,其中有三个(默认)图像,当用户点击它们时,它们将变为另一个。但是,当我滑动到另一个片段并返回到带有图像的片段时,开始时没有默认片段。当我滑动两次以便我将传递给另一个片段(距离原始图像的距离是2个片段)图像被重置为默认值。我试图从ViewPager实现setOffscreenPageLimit()并将其设置为1,但重置片段中的视图时的最小“长度”是2.如何在滑动操作后手动将图像更改为默认值?谢谢。
修改:我认为onResume()
无法解决原因的问题:Fragment onResume not called
但我不知道这意味着什么:/我有三个类FragmentController.class,PagerAdapter.class和特定片段的类,例如FirstFragment.class。我不知道如何将这些类连接在一起。
答案 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
}
});