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

本文介绍了一种在Android中使用自定义ListView实现手势翻页功能的方法。主要步骤包括:自定义ListView并添加翻页手势监听,自定义Adapter以固定每页显示的条目数量,以及实现业务逻辑来控制翻页行为。

该项目中的数据通过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.youkuaiyun.com/detail/duancanmeng/4096458

转载于:https://www.cnblogs.com/duancanmeng/archive/2012/02/28/2524634.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值