安卓系统:ImageView.SetVisibility不工作



我正在编写一些代码,以便在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);

最新更新