android ViewPager修改或替换某页

ViewPger在调用notifyDataSetChanged()时,会循环调用PagerAdapter中的getItemPosition()方法,遍历每一个pager。

我们在instantiateItem()中通过setTag()的方式,记住每个pager页。在getItemPosition()中,获取object的getTag(),如果要换的页面的下标等于这个tag,返回POSITION_NONE;否则,返回 POSITION_UNCHANGED。

这个方法返回 POSITION_NONE;  ,表示这个页换了,会调用destroyItem()方法删除,再调用instantiateItem()方法,创建。
返回 POSITION_UNCHANGED,表示没换,什么也不做。

private List<View> mViewCache = new ArrayList<View>();
private ViewPager viewPager;
private int curUpdatePager;

// 适配器
class MyPagerAdapter extends PagerAdapter {


	public void destroyItem(View arg0, int arg1, Object arg2) {
		View view = (View)arg2;
		((ViewPager) arg0).removeView((View)arg2);
	}


	public void finishUpdate(View arg0) {
	}


	public int getCount() {
		return mViewCache.size();
	}


	public Object instantiateItem(View arg0, int arg1) {
		mViewCache.get(arg1).setTag(arg1);
		((ViewPager) arg0).addView(mViewCache.get(arg1));


		return mViewCache.get(arg1);
	}


	public boolean isViewFromObject(View arg0, Object arg1) {
		return arg0 == (arg1);
	}


	public void restoreState(Parcelable arg0, ClassLoader arg1) {
	}


	public Parcelable saveState() {
		return null;
	}


	@Override
	public void startUpdate(View arg0) {
	}

	@Override
	public int getItemPosition(Object object) {
		View view = (View)object;
		if(curUpdatePager == (Integer)view.getTag()){
			return POSITION_NONE;  
		}else{
			return POSITION_UNCHANGED;
		}
		// return super.getItemPosition(object);
	}
}

/**
 * 更换pager的方法
 * @param view   新的pager
 * @param index  第几页
 * 
 * 示例:updateViewPagerItem(fragment2_parentctrl_changepwd,1);
 */
private void updateViewPagerItem(View view,int index){
	curUpdatePager = index;
	mViewCache.remove(index);
	mViewCache.add(index, view);
	viewPager.getAdapter().notifyDataSetChanged();
	// findViewById(getResources().getIdentifier("sysset_button"+(index+1), "id", "com.jzbyapp.suzhou")).requestFocus();
}


  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值