我正在编写一些代码,以便在ViewPager选择包含片段后,使先前加载的图像可见。然而,我不明白为什么ImageView.setVisibility()的代码似乎从来没有做任何事情。我做错了什么?
mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int i) {}
@Override
public void onPageScrolled(int i, float v, int i2)
{
ScreenSlidePageFragment myFrag = (ScreenSlidePageFragment) mPagerAdapter.getItem(i);
myFrag.removeImage();
}
@Override
public void onPageScrollStateChanged(int state)
{
if (state == ViewPager.SCROLL_STATE_IDLE)
{
ScreenSlidePageFragment myFrag = (ScreenSlidePageFragment) mPagerAdapter.getItem(mPagerAdapter.getItemPosition(null));
myFrag.loadImage();
}
}
});
loadImage和removeImage的代码如下。它是扩展片段的类的一部分。
public void loadImage()
{
if (background != null)
{
background.clearAnimation();
background.setVisibility(View.VISIBLE);
}
}
public void removeImage()
{
if (background != null)
{
background.clearAnimation();
background.setVisibility(View.INVISIBLE);
}
}
我认为当您使用onPageScrollStateChanged时,您正试图从viewpager中获取片段。然而,当您获得Item(int position)时,位置似乎是错误的
我可以建议你使用ArrayList或HashMap当您想要调用方法时。你应该像一样
@Override
public void onPageSelected(int position) {
list.get(position).loadImage();
if(position>0&&list.get(position-1)!=null){
list.get(position-1). removeImage()
}
if(position+1<list.size()&&list.get(position+1)!=null){
list.get(position+1). removeImage()
}
}
由于内存问题,我不建议这样做。如果列表的大小很小(我认为大约3到10个就可以了)
-----10.24附加答案我建议您使用FragmentStatePagerAdapter并覆盖getItemPosition
@Override
public int getItemPosition(Object object) {
return PagerAdapter.POSITION_NONE;
}
它将使你的viewpager销毁你不使用的片段。并在每次看到时创建片段。
和在ScreenSlidePageFragment中在onCreate、onResume或onCreateView 时加载图像
@Override
public void onResume() {
loadImage();
super.onResume();
}
override-onDestoy方法。
@Override
public void onDestroy() {
removeImage();
super.onDestroy();
}
尝试以下代码background.setVisibility(View.GONE);而不是background.setVisibility(View.INVISIBLE);