ViewPager刷新当前View

2017-05-05  本文已影响0人  Summer鱼

版权声明: 本文来自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一下。

214539jwavzwc11rcgzkog.jpg
上一篇 下一篇

猜你喜欢

热点阅读