Viewpager中动态更新View视图

<span style="color: rgb(50, 62, 50); font-family: Arial; font-size: 14px; line-height: 26px;">查了很多资料,发现要做到ViewPager刷新数据,动态更改adapter的数量那种效果只要实现这个方法就可以了:</span>
<span style="color: rgb(50, 62, 50); font-family: Arial; font-size: 14px; line-height: 26px;"></span><pre name="code" class="java">@Override
    public int getItemPosition(Object object) {
        // TODO Auto-generated method stub
        return PagerAdapter.POSITION_NONE;
    }

注意getItemPostion要返回POSTION_NONE时,viewpager会以为没有检测到item的存在从而刷新。但是这种方法不适合数据量比较大的。

 

我这里用的是Fragment装在到ViewPager中,即使我使用了这个方法,依然达不到效果。

但是每次

destroyItem掉view时,将view置空就可以了、




public class PageAdapter  extends PagerAdapter {

    private Context mContext;
    private ArrayList<ImageView> mlist;
    private ArrayList<ImgListBean.ImgsBean> mImage;

    public PageAdapter(Context mContext, ArrayList<ImageView> mlist,ArrayList<ImgListBean.ImgsBean> mImage) {
        this.mContext = mContext;
        this.mlist = mlist;
        this.mImage = mImage;
    }


    @Override
    public int getCount() {
        return mlist.size();
    }

    /**
     * 从指定的position创建page
     *
     * @param position The page position to be instantiated.
     * @return 返回指定position的page,这里不需要是一个view,也可以是其他的视图容器.
     */
    @Override
    public Object instantiateItem(View collection, final int position) {
        ImageView child = mlist.get(position);
        child.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String fileType = mImage.get(position).getFileType();
                if (TextUtils.equals("3",fileType)) {
                    Intent intent = new Intent(mContext, VideoActivity.class);
                    intent.putExtra("video", mImage.get(position).getFullPictureUrl());
                    mContext.startActivity(intent);
                }
            }
        });
        ((ViewPager) collection).addView(child, 0);
        return child;
    }


//    @Override
//    public void destroyItem(View collection, int position, Object view) {
//        ((ViewPager) collection).removeView(mlist.get(position));
//    }
    @Override    public void destroyItem(View collection, int position, Object o) {
// 动态removeView很重要,是否能够删除数据就靠这句,否则会导致无法刷新视图
        View view = (View)o;        ((ViewPager) collection).removeView(view);        view = null;    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view==(object);    }
    
// 强制动态更新Item
    @Override    public int getItemPosition(Object object) {        // TODO Auto-generated method stub        return PagerAdapter.POSITION_NONE;    }}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值