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
}
});
我有一个片段,其中包含三个(默认)图像,当用户单击它们时,它们将更改为另一个。但是当我滑动到另一个片段并返回到带有图像的片段时,没有像开始时那样默认的片段。当我滑动两次时,我将传递到另一个片段(与原始图像的距离是 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
}
});