版权声明: 本文来自Summer鱼简书,转载请注明出处。
项目需求里用到了一个功能,根据当前ViewPager显示的View拿到一个id,再用这个id去请求后台数据,后台数据会返回一个字段来判断当前View是否可用,不可用的话背景置灰,好吧,google去,找到了如下解决方案拿到当前View,如下:
1).在viewpager的setOnpageChange()的监听事件中,在onPageSelected()方法中,为当前view添加tag
mViewPager.setTag(currentItem);
2).通过viewpager的findViewWithTag()方法获取到
View view = mViewPager.findViewWithTag(mViewPager.getCurrentItem());
结果遇到的一个问题就是,拿到的View是滑动之前的View,滑动之后会出现当前View并没有变化,而是滑动之前的那个View发生变化,又换了个方案,在viewpager的adapter里面有一个方法可以获取到当前的view,如下:
private View mCurrentView;
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
mCurrentView = (View)object;
}
public View getPrimaryItem() {
return mCurrentView;
}
还是出现了之前的问题,拿到的View不对;
尼玛,想起了ListView的adapter刷新数据的方法,尝试了一下,纳尼,不起作用!
于是又各种Google,找到了如下解决方案:
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
重写adapter中的这个方法,改变数组里的相关数据,在mAdapter.notifyDataSetChanged();
试了一下,完美解决了,弊端大家都很容易看出来,就是我不需要刷新的项目也被重新加载了,浪费系统资源。在此Mark一下。
![](https://img.haomeiwen.com/i5130444/f70321015ffda7b5.jpg)
网友评论