点击按钮刷新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来分页显示刷新的内容相关推荐

  1. android中ListView控件onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

  2. android listview 数据数组制作,android – 从对象的数组列表中填充listview

    在你的活动 AdapterPerson adbPerson; ArrayList myListItems = new ArrayList(); //then populate myListItems ...

  3. 金山快盘显示服务器维护中,金山快盘总是显示“正在查找文件变化”无法同步的终极解决方法...

    三好酋长最开始用的同步网盘就是金山快盘,但是从今年春上开始,竟然无法同步了,始终显示"正在查找文件变化",一直显示在那里.如图: 查看详情发现找到的文件变化始终显示为 0 .三好酋 ...

  4. android sdk 封装html5,Android平台以WebView方式集成HTML5+SDK方法

    HTML5+ SDK 可以按照"独立应用"和"单页面"两种种方式进行集成,两种集成方式各有优点. 独立应用集成方式:即Widget集成方式,开发者在集成后可在需 ...

  5. qt 从文件中读出数据显示在表格中_java如何从文件中读取数据存在数组再显示在表格中!!...

    再谢谢你昨天帮我解决了那个读数据再显示在JTextArea中,现在我想显示在表格中啦!而且对应显示!数据一行一行读,再存在arraylist中数据:何子杨13580130150652150计算机丁香维 ...

  6. 8.在python中用data_only=True设置显示excel表格中公式的结果为None的解决方法

    在用python调用excel文件显示带公式的表格内容,有两种显示结果:第一种是直接显示表格中公式人内容:另一种是显示其表格中公式的结果. 显示第一种,可以这样输入代码: 显示第二种,可以这样输入代码 ...

  7. Android之ListView异步加载图片且仅显示可见子项中的图片

    折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...

  8. Android数据库 分页查询,Android之怎么使用SQLite数据库(增、删、改、查、分页等)以及ListView显示数据(转)...

    由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦: 步骤如下: 一.介绍: 此文主要是介绍怎么使用android自带的数据库SQLite,以及把后台的数据用Li ...

  9. android中设置ListView的选中的Item的背景颜色(附源码)

    http://longyi-java.iteye.com/blog/976067 ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了 ...

最新文章

  1. 查阅arXiv论文新神器,一行代码比较版本差别,Github新开源!
  2. springboot系列八、springboot整合kafka
  3. linux使用苹果字体,Ubuntu 8.04字体美化之安装苹果丽黑字体教程(图)
  4. 支付签约_已成燎原之势!蜻蜓支付出库、签约、地推火爆!
  5. OpenMP对于嵌套循环应该添加多少个parallel for
  6. OWASP 2013年十大Web应用安全漏洞
  7. 慕课网_《Netty入门之WebSocket初体验》学习总结
  8. ElasticSearch使用入门及拼音搜索介绍
  9. php抓取微信文章图片保存到本地
  10. DAO年终盘点:光环加身,道阻且长 |链捕手
  11. 可以升级鸿蒙吗,魅族上船,鸿蒙有戏?
  12. 进化从不关心已经完成生殖任务的人
  13. TearDrops(泪滴攻击)教程
  14. js获取最近12个月的时间
  15. Metasploit入侵win7系统
  16. IPO (Python)
  17. 小红书笔记发布软件 批量上传视频
  18. 深度硬核,思维导图拯救拖延症患者!
  19. KDRB-ZC变压器绕组阻抗测试仪
  20. 计算物理学(数值分析)上机实验答案5、常微分方程初值问题的数值解法

热门文章

  1. 用了fastapi还需要nginx_专门为API接口开发出现,FastAPI零门槛学习
  2. div中加载html js,Div里面载入另一个页面的实现(Ajax取代框架)
  3. 弹球游戏python代码含记分模式_python编写弹球游戏的实现代码
  4. 天眼探空经济发展_【砥砺奋进的五年】观神州 惠民生:“天眼”探空惊艳全球...
  5. css 图表饼图,仅具有CSS的百分比饼图
  6. 你知道吗?OAuth2客户端有两种,认证方式有七种。
  7. 不职业不同睡姿,你是哪一种?
  8. 皮一皮:这才是「真 · 老司机」...
  9. Prometheus + Granafa 构建高大上的MySQL监控平台
  10. 提交代码到GitHub,小绿格却不增加?