Android项目技术总结:主界面中ListView装载数据并结合手势进行翻页

该项目中的数据通过ListView来呈现,并且通过手势可以进行翻页。具体步骤:

一、自定义ListView,增加手势;

二、自定义Adapter,固定每页显示的条目数量;

三、编写业务逻辑

  

 

通过一个Demo来观察具体的实现:

一、自定义ListView

    1、首先定义两个接口,一个向前翻页,一个向后翻页:

public interface OnPrevPageListener {
        void onPrevPage();
    }
	
	public interface OnNextPageListener {
        void onNextPage();
    }


    2、新建IListView类,继承ListView,并注册这两个接口:

public void setPervPageListener(OnPrevPageListener pervPageListener) {
		this.pervPageListener = pervPageListener;
	}
	
	public void setNextPageListener(OnNextPageListener nextPageListener) {
		this.nextPageListener = nextPageListener;
	}

    3、重写performItemClick和onTouchEvent方法,确定手势的轨迹:

@Override
	public boolean performItemClick(View view, int position, long id) {
    	int m=mTouchSize;
    	mTouchSize=0;
    	if(m > MAXTouchSize){
    		return true;
    	}else{
    		return super.performItemClick(view, position, id);
    	}
	}
    
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_MOVE && event.getHistorySize() > mTouchSize) {
				mTouchSize = event.getHistorySize();
		}
		mDetector.onTouchEvent(event);
		return super.onTouchEvent(event);
	}


    4、增加手势:

private class IGestureListener extends SimpleOnGestureListener{
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {
	        if (e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) {
	        	if(nextPageListener!=null){
	        		nextPageListener.onNextPage();
	        		IListView.this.startAnimation(nextanim);
	        	}
	        } else if (e2.getX() - e1.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) {
	        	if(pervPageListener!=null){
	        		pervPageListener.onPrevPage();
	        		IListView.this.startAnimation(pervanim);
	        	}
	        }
			return false;
		}
	}

 

二、自定义Adapter

    因为Demo对数据没什么监听要求,所以Adapter很简单,只是规定了每个页面返回的记录条数。

static int pageCount = 10;
@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return pageCount;			//备注4
	}

    其中的生成view的方法:

@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		convertView = (LinearLayout) inflater.inflate(layoutId, null);
		TextView listid = (TextView)convertView.findViewById(ids[0]);
		listid.setText(data.get(position+(FlipListDemo.pageid-1)*pageCount).get(strs[0]).toString());	//备注3
		TextView listvalue = (TextView)convertView.findViewById(ids[1]);
		listvalue.setText(data.get(position+(FlipListDemo.pageid-1)*pageCount).get(strs[1]).toString());
		return convertView;
	}



三、业务逻辑的实现

iList.setPervPageListener(new OnPrevPageListener() {
			
			public void onPrevPage() {
				if(pageid>1){
					pageid--;
					initData();
				}
			}
		});
		
		iList.setNextPageListener(new OnNextPageListener() {
			
			public void onNextPage() {
				if(pageid<10){
					pageid++;			//备注1
					initData();
				}
			}
		});


其中数据加载方法initData():

private void initData() {
		for (int i = (pageid-1)*10; i < pageid*10; i++) {		//备注2
			HashMap<String,String> map = new HashMap<String,String>();
			map.put("id", i+"");
			map.put("value", "i want "+i);
			list.add(map);
		}
		page.setText(pageid+"");
		adapter.notifyDataSetChanged();
	}

 

可以看出业务逻辑实现的顺序:

1、备注1,当我们要翻到下一页,这里的pageid便会加1,。

2、备注2,因为pageid自加了1,于是这里的for循环得到的数据变为10-19,为第二页的数据。

3、备注3,因为备注2的方法中的adapter更新,于是这里的一些值将会被重新赋新值,即相应的页面对应的条数。

4、备注4,当备注3的值赋好后,这里规定生成10条记录。

至此,新的一页便产生了,往前是一样的逻辑。
最后奉上Demo代码:http://download.csdn.net/detail/duancanmeng/4096458

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值