簡體   English   中英

Android:ImageView.SetVisibility不起作用

[英]Android: ImageView.SetVisibility not working

我正在編寫一些代碼,以便一旦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獲取片段。 但是當您獲得getItem(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破壞您不使用的片段。 並在每次看到時創建片段。

並且在onCreate或onResume或onCreateView時在ScreenSlidePageFragment中加載圖像

@Override
public void onResume() {
    loadImage();
    super.onResume();
}

覆蓋onDestoy方法。

@Override
public void onDestroy() {
    removeImage();
    super.onDestroy();
}

試試這個代碼background.setVisibility(View.GONE); 而不是background.setVisibility(View.INVISIBLE);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM