android listview分页显示,Android应用中使用ListView来分页显示刷新的内容
点击按钮刷新1、效果如下:
实例如下: 上图的添加数据按钮可以换成一个进度条 因为没有数据所以我加了一个按钮添加到数据库用于测试;一般在服务器拉去数据需要一定的时间,所以可以弄个进度条来提示用户:
点击加载按钮的时候,向数据库读取一次数据,把读取的数据追加到原来的数据集中;然后显示出来
package com.exampleandroid.xiong.listviewpages;
public class News {
private String title;
private int id;
/**
*
* @return 返回新闻标题
*/
public String getTitle() {
return title;
}
/**
*
* @param title
* 设置新闻标题
*/
public void setTtitle(String title) {
this.title = title;
}
/**
*
* @return 返回新闻标识
*/
public int getId() {
return id;
}
/**
*
* @param id
* 设置新闻标识
*/
public void setId(int id) {
this.id = id;
}
}
package com.exampleandroid.xiong.listviewpages;
import java.util.ArrayList;
import java.util.List;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class GetNews {
/**
*
* @param page
* 需要加载的页数 每页数据5条
* @param dbnews
* SQLiteOpenHelper子类
* @return 返回新闻加载的数据
*/
public List getListNews(int page, DbSqliteNews dbnews) {
List list = new ArrayList();
String sql = "select * from tb_newstile where news_id not in(select news_id from tb_newstile LIMIT "
+ 5 * (page - 1) + ") LIMIT " + 5 * page;
Cursor cursor = dbnews.getReadableDatabase().rawQuery(sql, null);
while (cursor.moveToNext()) {
News news = new News();
news.setTtitle(cursor.getString(1));
news.setId(cursor.getInt(0));
list.add(news);
}
cursor.close();
return list;
}
/**
* 插入100条数据用于测试
*
* @param dbnews
* SQLiteOpenHelper子类
*/
public void insertData(DbSqliteNews dbnews) {
SQLiteDatabase datas = dbnews.getWritableDatabase();
datas.beginTransaction();
try {
for (int i = 0; i < 100; i++) {
datas.execSQL("insert into tb_newstile values(?,?)",
new Object[] { i, "新闻标题" + i });
}
datas.setTransactionSuccessful();
} catch (Exception e) {
System.out.println("数据插入失败!");
e.printStackTrace();
} finally {
datas.endTransaction();
}
}
}
package com.exampleandroid.xiong.listviewpages;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DbSqliteNews extends SQLiteOpenHelper {
public DbSqliteNews(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
// 创建数据库表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table tb_newstile(news_id integer ,news_title varchar(100))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
package com.exampleandroid.xiong.listviewpages;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView newShow_list;
private Button loadmore, adddata;
// ListView加载的数据
private List shownews;
private GetNews getnews;
private DbSqliteNews dbnews;
// 加载的页数
private int pagecount = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
newShow_list = (ListView) findViewById(R.id.newsShow_list);
loadmore = (Button) findViewById(R.id.loadmore_bt);
adddata = (Button) findViewById(R.id.adddata);
dbnews = new DbSqliteNews(this, "new.db", null, 1);
getnews = new GetNews();
final ListAdpaterNews listadpter=new ListAdpaterNews();
//此按钮只为添加测试数据
adddata.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//插入数据
getnews.insertData(dbnews);
//获取数据
shownews = getnews.getListNews(pagecount, dbnews);
//显示数据
newShow_list.setAdapter(listadpter);
}
});
loadmore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pagecount++;
//将数据追加到原集合
shownews.addAll(getnews.getListNews(pagecount, dbnews));
//刷新数据
listadpter.notifyDataSetInvalidated();
}
});
// 第一次加载的数据
shownews = getnews.getListNews(pagecount, dbnews);
newShow_list.setAdapter(listadpter);
}
class ListAdpaterNews extends BaseAdapter {
@Override
public int getCount() {
return pagecount * 5;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = LayoutInflater.from(MainActivity.this).inflate(
R.layout.news_title, null);
TextView txttitle = (TextView) view.findViewById(R.id.txt_title);
ImageView images = (ImageView) view
.findViewById(R.id.showimage_title);
images.setBackgroundResource(R.drawable.n_me_l);
txttitle.setText(shownews.get(position).getTitle());
return view;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
android:id="@+id/newsShow_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
android:id="@+id/adddata"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="添加数据" />
android:id="@+id/loadmore_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/loadmore" />
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
android:orientation="horizontal" >
android:id="@+id/showimage_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/n_me_l"
android:contentDescription="@string/imagenews" />
android:id="@+id/txt_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
下拉刷新当ListView要显示的数据过多时,为了更快的响应用户,这个时候ListView进行分页显示再合适不过了。
ListView分页显示数据的原理其实很简单,当用户滑到ListView最后一项时,通知异步线程进行加载下一页的数据,下一页数据加载完成时,调用设置好的Adapter的notifyDataSetChange()方法,ListView显示下一页的数据。
现在有两个问题要解决,第一个问题要知道用户是否滑到了ListView的最后一项;第二个问题是如何提示用户正在加载下一页的数据,让用户耐心等待。
解决第一个问题,我们只需自定义ListView,让它实现OnScrollListener类监听ListView的滑动状态,以此来判断是否滑动到了最后一项
这里只简单说一下要点:
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount ) {
if (getAdapter() == null){
return ;
}
if (getAdapter().getCount() == 0){
return ;
}
int lastItemIndex = firstVisibleItem + visibleItemCount;
if (lastItemIndex >= totalItemCount){
// 用户已经滑动到了ListView的最后一项
}
要解决第二个问题也是在onScroll()方法中来实现
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (getAdapter() == null){
return ;
}
if (getAdapter().getCount() == 0){
return ;
}
int lastItemIndex = firstVisibleItem + visibleItemCount;
if (lastItemIndex >= totalItemCount && ! isLoading){
addFooterView( footerView );//用来提示用户正在加载下一页的数据
isLoading = true ;
listener.loadData();
}
android listview分页显示,Android应用中使用ListView来分页显示刷新的内容相关推荐
- android中ListView控件onItemClick事件中获取listView传递的数据
http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...
- android listview 数据数组制作,android – 从对象的数组列表中填充listview
在你的活动 AdapterPerson adbPerson; ArrayList myListItems = new ArrayList(); //then populate myListItems ...
- 金山快盘显示服务器维护中,金山快盘总是显示“正在查找文件变化”无法同步的终极解决方法...
三好酋长最开始用的同步网盘就是金山快盘,但是从今年春上开始,竟然无法同步了,始终显示"正在查找文件变化",一直显示在那里.如图: 查看详情发现找到的文件变化始终显示为 0 .三好酋 ...
- android sdk 封装html5,Android平台以WebView方式集成HTML5+SDK方法
HTML5+ SDK 可以按照"独立应用"和"单页面"两种种方式进行集成,两种集成方式各有优点. 独立应用集成方式:即Widget集成方式,开发者在集成后可在需 ...
- qt 从文件中读出数据显示在表格中_java如何从文件中读取数据存在数组再显示在表格中!!...
再谢谢你昨天帮我解决了那个读数据再显示在JTextArea中,现在我想显示在表格中啦!而且对应显示!数据一行一行读,再存在arraylist中数据:何子杨13580130150652150计算机丁香维 ...
- 8.在python中用data_only=True设置显示excel表格中公式的结果为None的解决方法
在用python调用excel文件显示带公式的表格内容,有两种显示结果:第一种是直接显示表格中公式人内容:另一种是显示其表格中公式的结果. 显示第一种,可以这样输入代码: 显示第二种,可以这样输入代码 ...
- Android之ListView异步加载图片且仅显示可见子项中的图片
折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...
- Android数据库 分页查询,Android之怎么使用SQLite数据库(增、删、改、查、分页等)以及ListView显示数据(转)...
由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦: 步骤如下: 一.介绍: 此文主要是介绍怎么使用android自带的数据库SQLite,以及把后台的数据用Li ...
- android中设置ListView的选中的Item的背景颜色(附源码)
http://longyi-java.iteye.com/blog/976067 ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了 ...
最新文章
- 查阅arXiv论文新神器,一行代码比较版本差别,Github新开源!
- springboot系列八、springboot整合kafka
- linux使用苹果字体,Ubuntu 8.04字体美化之安装苹果丽黑字体教程(图)
- 支付签约_已成燎原之势!蜻蜓支付出库、签约、地推火爆!
- OpenMP对于嵌套循环应该添加多少个parallel for
- OWASP 2013年十大Web应用安全漏洞
- 慕课网_《Netty入门之WebSocket初体验》学习总结
- ElasticSearch使用入门及拼音搜索介绍
- php抓取微信文章图片保存到本地
- DAO年终盘点:光环加身,道阻且长 |链捕手
- 可以升级鸿蒙吗,魅族上船,鸿蒙有戏?
- 进化从不关心已经完成生殖任务的人
- TearDrops(泪滴攻击)教程
- js获取最近12个月的时间
- Metasploit入侵win7系统
- IPO (Python)
- 小红书笔记发布软件 批量上传视频
- 深度硬核,思维导图拯救拖延症患者!
- KDRB-ZC变压器绕组阻抗测试仪
- 计算物理学(数值分析)上机实验答案5、常微分方程初值问题的数值解法
热门文章
- 用了fastapi还需要nginx_专门为API接口开发出现,FastAPI零门槛学习
- div中加载html js,Div里面载入另一个页面的实现(Ajax取代框架)
- 弹球游戏python代码含记分模式_python编写弹球游戏的实现代码
- 天眼探空经济发展_【砥砺奋进的五年】观神州 惠民生:“天眼”探空惊艳全球...
- css 图表饼图,仅具有CSS的百分比饼图
- 你知道吗?OAuth2客户端有两种,认证方式有七种。
- 不职业不同睡姿,你是哪一种?
- 皮一皮:这才是「真 · 老司机」...
- Prometheus + Granafa 构建高大上的MySQL监控平台
- 提交代码到GitHub,小绿格却不增加?