美文网首页
ViewPager刷新当前View

ViewPager刷新当前View

作者: Summer鱼 | 来源:发表于2017-05-05 14:06 被阅读0次

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

    相关文章

      网友评论

          本文标题:ViewPager刷新当前View

          本文链接:https://www.haomeiwen.com/subject/egajtxtx.html