Android ListView 滑动分页

本文介绍如何使用ViewPager和ListView结合,实现横向滑动分页的效果。通过在每个ViewPager页面动态添加包含固定数量ListView Item的ListView,简化数据绑定。作者提到在尝试实现垂直滑动分页时遇到问题,可能是ListView与ViewPager滑动冲突,尚未找到解决方案。提供了一个GitHub上的自定义ViewPager库链接,并分享了关键的适配器代码,将数据源分割为每个页面显示6条记录的子List。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

主要用ViewPager + ListView 实现,实现思路:ViewPager实现横向分页,在每个页面动态添加固定条目的ListView,(有人会说直接用布局写页面,可是如果每个Item相同且有五六个,适配器绑定数据源就会变得很麻烦)效果已经实现,但个人觉得这个办法还是比较笨的,本人还是菜鸟,希望大神指点。可怜

 

我用的是 GitHub 上大神写自定义ViewPager(https://github.com/JakeWharton/Android-DirectionalViewPager) ,一开始想做垂直的上下滑动分页,可是效果有时可以有时不行,应该是ListView本身的上下滑动与ViewPager垂直滑动冲突了,目前还没有解决,查阅资料是需要截获ListView的OnThouch事件(求教了)。

 

其他的代码都简单,下面附上源码,主要把ViewPager的适配器代码拿出来说一下,思路就是将一个List源分割成页数一样的子List,我这里是设定的每个页面固定六条记录:

 

public class ListViewPagerAdapter extends PagerAdapter {
	Context context;
	
	List<View> mListViewPager = new ArrayList<View>(); // ViewPager对象的内容
	List<String> list = new ArrayList<String>();   
        	List<List<String>> lcontant = null;//用来装分割的List
	int pageNum = 1; //初始化页数

	public ListViewPagerAdapter(Context context, List<String> kf) {
		int count = 0;  //循环次数
		int pos = 0;		//当前位置
		
		this.context = context;
		this.list = kf;
		//计算页数
		pageNum = (int) Math.ceil(list.size() / 6.0);
		Log.d("hx2", String.valueOf(pageNum));
		if (Math.ceil(kf.size() / 6.0) == 0) {
			pageNum = 1; //不足一页按一页算
		}
		lcontant = new ArrayList<List<String>>();
		for (int i = 0; i < pageNum; i++) {
			Log.d("hx2", String.valueOf(i));
			List<String> item = new ArrayList<String>();
			for(int k = pos;k<kf.size();k++){
				count++;
				pos = k;
				item.add(kf.get(k));
				//每个List六条记录,存满6个跳出
				if(count == 6){
					count = 0;
					pos = pos+1; //从下一条开始
					break;
				}
			}
			lcontant.add(item);
		}
		//为每个页面绑定Listview
		for (int j = 0; j < pageNum; j++) {
			View viewPager = LayoutInflater.from(context).inflate(
					R.layout.list, null);
			ListView mList = (ListView) viewPager.findViewById(R.id.wifi_list);
			
			mList.setAdapter(new Myadapter(context, lcontant.get(j)));
			mListViewPager.add(viewPager);
		}

	}

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

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

	@Override
	public Object instantiateItem(View container, int position) {
		((ViewPager) container).addView(mListViewPager.get(position));
		return mListViewPager.get(position);

	}

	@Override
	public void restoreState(Parcelable arg0, ClassLoader arg1) {

	}

	@Override
	public Parcelable saveState() {
		return null;
	}

	@Override
	public void startUpdate(View arg0) {
	}

	@Override
	public void destroyItem(View container, int position, Object arg2) {
		ViewPager pViewPager = ((ViewPager) container);
		pViewPager.removeView(mListViewPager.get(position));
	}

	@Override
	public void finishUpdate(View arg0) {
		// TODO Auto-generated method stub

	}
}

 

源码下载页:http://download.youkuaiyun.com/detail/huxing0215/7017231
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值