`

Android学习之滑动分页

阅读更多

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/mylayout"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"> 
</LinearLayout>

 

 

 

tab_info.xml:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout 
	android:layout_width="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="wrap_content">
	<TableRow>
		<TextView 
			android:id="@+id/id"
			android:textSize="30px"	
			android:layout_height="wrap_content"
			android:layout_width="50px"/>
		<TextView
			android:id="@+id/name" 
			android:textSize="30px"	
			android:layout_height="wrap_content"
			android:layout_width="130px"/>
		<TextView
			android:id="@+id/birthday" 
			android:textSize="30px"	
			android:layout_height="wrap_content"
			android:layout_width="180px"/>
	</TableRow>
</TableLayout>

 

 

 

MySQLiteDemo.java:

import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
 
public class MySQLiteDemo extends Activity {
	private SQLiteOpenHelper helper = null ;					// 数据库操作
	private LinearLayout mylayout = null ;						// 定义布局管理器
	private ListView listView ;									// ListView组件
	private int currentPage = 1 ;								// 当前页
	private int lineSize = 15 ;									// 每页显示15条数据
	private int allRecorders = 0 ;								// 保存全部记录数
	private int pageSize = 1 ; 									// 总页数
	private int lastItem = 0 ;									// 保存最后一个记录点
	private SimpleAdapter simpleAdapter = null; 				// 适配器
	private LinearLayout loadLayout = null ;					// 定义布局管理器
	private TextView loadInfo = null ;							// 定义提示文本
	private List<Map<String, Object>> all = null ;				// 保存适配器数据
	private LayoutParams layoutParams = new LinearLayout.LayoutParams(
			LinearLayout.LayoutParams.FILL_PARENT,
			LinearLayout.LayoutParams.WRAP_CONTENT);			// 布局参数
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);						// 父类onCreate()
        super.setContentView(R.layout.main);					// 默认布局管理器
        this.mylayout = (LinearLayout) super.findViewById(R.id.mylayout) ;	// 取得组件
        this.loadLayout = new LinearLayout(this) ;				// 定义线性布局管理器
        this.helper = new MyDatabaseHelper(this) ;				// 定义数据库辅助类
        this.loadInfo = new TextView(this) ;					// 实例化文本组件
        this.loadInfo.setText("数据加载中ing..") ;				// 定义文本
        this.loadInfo.setGravity(Gravity.CENTER) ;				// 文字居中显示
        this.loadInfo.setTextSize(30.0f) ;						// 设置显示文字大小
		this.loadLayout.addView(this.loadInfo, this.layoutParams);// 增加新组件
		this.loadLayout.setGravity(Gravity.CENTER) ;			// 数据居中显示
        this.showAllData() ;									// 显示数据
		this.pageSize = (this.allRecorders + this.currentPage - 1)
				/ this.lineSize; 								// 求出总页数
    }
    private class OnScrollListenerImpl implements OnScrollListener {
		@Override
		public void onScroll(AbsListView view, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			MySQLiteDemo.this.lastItem = firstVisibleItem + visibleItemCount - 1;
		}

		@Override
		public void onScrollStateChanged(AbsListView view, int scrollState) {
			if (MySQLiteDemo.this.lastItem == MySQLiteDemo.this.simpleAdapter.getCount()								// 当前记录已经是在最底部
					&& MySQLiteDemo.this.currentPage < MySQLiteDemo.this.pageSize	// 当前页小于总页数
					&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) { // 屏幕不再滚动时触发
				MySQLiteDemo.this.currentPage ++ ;				// 修改当前所在页
				MySQLiteDemo.this.listView
						.setSelection(MySQLiteDemo.this.lastItem);	// 设置显示位置
				MySQLiteDemo.this.appendData() ;				// 刷新显示数据
			}
		}
    }
	private void showAllData() {
		this.helper = new MyDatabaseHelper(MySQLiteDemo.this) ;	// 实例化对象
		this.listView = new ListView(MySQLiteDemo.this); 		// 定义ListView
		MytabCursor cur = new MytabCursor(this.helper
				.getReadableDatabase()) ;						// 数据库查询操作
		this.allRecorders = cur.getCount() ;					// 查询全部记录数
		this.all = cur.find(this.currentPage, this.lineSize); 	// 取出查询数据
		this.simpleAdapter = new SimpleAdapter (this ,
			all, 												// 将数据包装
			R.layout.tab_info, 									// 每行显示一条数据
			new String[] { "id", "name","birthday" } ,			// 设置组件的字段
			new int[] { R.id.id, R.id.name, R.id.birthday });	// 实例化适配器对象
		this.listView.addFooterView(MySQLiteDemo.this.loadLayout) ;	// 增加一个标注
		this.listView.setAdapter(this.simpleAdapter); 			// 设置显示数据
		this.listView.setOnScrollListener(new OnScrollListenerImpl()) ;	// 设置滚动监听
		MySQLiteDemo.this.mylayout.addView(this.listView); 		// 追加组件
	}
	private void appendData() {									// 追加新数据
		MytabCursor cur = new MytabCursor(this.helper
				.getReadableDatabase()) ;						// 数据库查询操作
		List<Map<String, Object>> newData = cur.find(this.currentPage,
				this.lineSize); 								// 取出查询数据
		this.all.addAll(newData) ;								// 追加数据
		this.simpleAdapter.notifyDataSetChanged() ;				// 更新记录通知
	}
}

 

 

 

MytabCursor.java:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class MytabCursor {
	private static final String TABLENAME = "mytab" ;			// 数据表名称 
	private SQLiteDatabase db = null ;							// SQLiteDatabase
	public MytabCursor(SQLiteDatabase db) { 					// 构造方法
		this.db = db ;											// 接收SQLiteDatabase
	}
	public int getCount() {										// 返回记录数
		int count = 0 ; 										// 保存返回结果
		String sql = "SELECT COUNT(id) FROM " + TABLENAME ;		// 查询SQL
		Cursor result = db.rawQuery(sql, null);					// 查询
		for (result.moveToFirst(); !result.isAfterLast(); result.moveToNext()) {
			count = result.getInt(0) ;							// 取出查询结果
		}
		return count ;
	} 
	public List<Map<String,Object>> find(int currentPage, int lineSize) {	// 查询数据表
		List<Map<String,Object>> all = new ArrayList<Map<String,Object>>() ;// 定义List集合
		String sql = "SELECT id,name,birthday FROM " + TABLENAME
				+ " LIMIT ?,? " ;								// 查询SQL
		String selectionArgs[] = new String[] {
				String.valueOf((currentPage - 1) * lineSize),
				String.valueOf(lineSize) }; 					// 查询参数
		Cursor result = db.rawQuery(sql, selectionArgs);		// 查询
		for (result.moveToFirst(); !result.isAfterLast(); result.moveToNext()) {
			Map<String,Object> map = new HashMap<String,Object>() ;
			map.put("id", result.getInt(0));					// 取出id字段的内容
			map.put("name", result.getString(1));				// 取出name字段的内容
			map.put("birthday", result.getString(2));			// 取出birthday字段的内容
			all.add(map);										// 向集合保存
		}
		this.db.close() ;										// 关闭数据库连接
		return all ;  
	}
}

 

分享到:
评论

相关推荐

    android listview左右滑动分页

    http://blog.csdn.net/icqapp/article/details/24978057 详看效果图...android listview左右滑动分页(viewpager嵌套listview进行分页),焦点图带圆焦点 先敬告学者:如在此项目上运行不了的直接找到本人QQ:508181017,

    Android ListView 滑动分页

    本篇文章将详细讲解如何实现Android ListView的滑动分页功能。 首先,理解滑动分页的基本原理。滑动分页基于“按需加载”的概念,即仅在用户滚动到列表底部时才请求服务器获取新的数据。这样避免了一次性加载所有...

    android按钮分页与滑动分页

    在Android开发中,分页是一种常见的用户界面设计技术,它允许...通过研究和理解paginationListViewDemo,开发者可以学习如何在实际项目中实现分页功能,无论是按钮分页还是滑动分页,都能提供流畅且高效的用户体验。

    安卓Android源码——安卓Android Launcher 桌面分页滑动代码.rar

    在安卓系统中,Launcher是用户接触最频繁的组件之一,它是设备主屏幕,包含了应用快捷方式、小部件等元素,并支持横向滑动切换分页。本压缩包中的"TestPagedView"文件很可能是实现这一功能的一个示例或实验性的源...

    android 左右滑动分页源码

    总的来说,这个"android 左右滑动分页源码"是一个很好的学习资源,可以帮助开发者深入理解 ViewPager 和其适配器的工作机制,同时提供了一个实际的实现案例,方便进行二次开发和定制。通过研究和实践,开发者能够更...

    滑动菜单+滑动分页

    综上所述,通过学习和实践这些资源,开发者能够掌握在Android应用中集成滑动菜单和滑动分页的基本技能,提高应用的交互性和用户友好性。同时,理解并掌握这些库的内部工作原理,也能为自定义功能和优化性能打下基础...

    用recyclerview实现分页滑动,横向纵向分页

    本教程将深入讲解如何利用RecyclerView实现横向和纵向的分页滑动,充分利用Android原生功能。 首先,理解RecyclerView的基本结构。RecyclerView包含一个Adapter,它负责将数据集绑定到视图上,以及一个...

    android 基于ViewPager的下tab滑动分页效果

    在Android开发中,创建一个带有滑动分页效果的Tab组件是常见的需求,尤其是在构建具有多个子页面的应用中。`ViewPager` 和 `TabLayout` 是Android Support Library中的两个关键组件,用于实现这种交互式界面。本篇...

    Android viewpage 水平滑动分页 加indicator

    这个教程将深入探讨如何在Android应用中实现ViewPage的水平滑动分页,并添加Indicator。 首先,`ViewPage`是Android SDK提供的一种可滚动视图容器,它可以包含多个`Fragment`或`View`。通过设置适配器...

    android gridview分页和滑动效果

    综上所述,实现Android GridView的分页和滑动效果涉及到的主要知识点包括:GridView的基础用法、Adapter的使用、滚动事件监听、自定义滚动效果以及用户体验优化。理解并掌握这些内容,可以帮助开发者创建出更加动态...

    Android仿抖音上下滑动布局

    Android 仿抖音上下滑动布局详解 Android 仿抖音上下滑动布局是指在 Android 应用程序中实现类似抖音 App 的上下滑动布局效果,该效果可以实现上下滑动、监听播放、自动吸顶、吸底等功能。本文将详细介绍 Android ...

    android上Metro 效果 滑动 分页

    本项目着重讲解如何在Android平台上创建一个具备滑动分页功能的“Metro效果”应用。 首先,我们要了解“ViewPager”组件。ViewPager是Android SDK中用于实现页面滑动效果的核心组件,它可以展示多个页面,并允许...

    android垂直分页滑动源码

    在Android开发中,垂直分页滑动是一种常见的用户界面设计,尤其在展示大量数据或内容时,如新闻、电商商品列表等。这个源码提供了一种实现方式,名为"D_VScrollerView",它允许用户在垂直方向上平滑地浏览不同页面。...

    android滑动分页

    在Android开发中,"android滑动分页"是一种常见的用户界面设计,用于提供流畅的多页面浏览体验。这种设计通常采用ViewPager组件来实现,它允许用户通过左右滑动来切换不同的页面,非常适合用来展示照片或者内容丰富...

    ListView水平滑动分页

    在Android中实现ListView的水平滑动分页,主要涉及到以下几个关键知识点: 1. **自定义Adapter**:首先,你需要创建一个自定义的Adapter,这个Adapter需要能够处理水平布局的数据。这通常意味着你需要重写`getView...

    Android开发中滑动分页功能实例详解

    Android开发中滑动分页功能实例详解 Android开发中滑动分页功能是指在Android应用程序中实现滑动分页的功能,以便用户可以滑动屏幕来查看更多的内容。滑动分页功能可以应用于各种Android应用程序中,如新闻阅读器...

    android Listview下拉刷新 上拉(滑动分页)加载更多

    在Android开发中,ListView是常用的数据展示控件,用于显示大量的列表数据。为了提供更好的用户体验,通常会添加下拉刷新和上拉加载更多的功能。这些功能使得用户可以在滚动到列表顶部时更新数据(下拉刷新),或者...

    android滑动SQLite分页加载

    本篇文章将深入探讨如何在Android中结合SQLite实现滑动分页加载。 首先,我们需要了解SQLite的基本操作,包括创建数据库、表,以及插入、查询和更新数据。在Android中,通常通过SQLiteOpenHelper类来管理数据库的...

    Android应用源码之Android Launcher 桌面分页滑动代码.zip

    这个"Android应用源码之Android Launcher 桌面分页滑动代码"压缩包,显然是为了帮助开发者深入理解Android Launcher的实现原理,特别是关于桌面分页滑动的部分。下面将详细解析这个主题。 一、Android Launcher概述...

Global site tag (gtag.js) - Google Analytics