[英]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.