Android應用中使用ListView來分頁顯示刷新的內(nèi)容
點擊按鈕刷新
1、效果如下:


實例如下: 上圖的添加數(shù)據(jù)按鈕可以換成一個進度條 因為沒有數(shù)據(jù)所以我加了一個按鈕添加到數(shù)據(jù)庫用于測試;一般在服務器拉去數(shù)據(jù)需要一定的時間,所以可以弄個進度條來提示用戶:
點擊加載按鈕的時候,向數(shù)據(jù)庫讀取一次數(shù)據(jù),把讀取的數(shù)據(jù)追加到原來的數(shù)據(jù)集中;然后顯示出來
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
* 需要加載的頁數(shù) 每頁數(shù)據(jù)5條
* @param dbnews
* SQLiteOpenHelper子類
* @return 返回新聞加載的數(shù)據(jù)
*/
public List<News> getListNews(int page, DbSqliteNews dbnews) {
List<News> list = new ArrayList<News>();
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條數(shù)據(jù)用于測試
*
* @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("數(shù)據(jù)插入失敗!");
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);
}
// 創(chuàng)建數(shù)據(jù)庫表
@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加載的數(shù)據(jù)
private List<News> shownews;
private GetNews getnews;
private DbSqliteNews dbnews;
// 加載的頁數(shù)
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();
//此按鈕只為添加測試數(shù)據(jù)
adddata.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//插入數(shù)據(jù)
getnews.insertData(dbnews);
//獲取數(shù)據(jù)
shownews = getnews.getListNews(pagecount, dbnews);
//顯示數(shù)據(jù)
newShow_list.setAdapter(listadpter);
}
});
loadmore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pagecount++;
//將數(shù)據(jù)追加到原集合
shownews.addAll(getnews.getListNews(pagecount, dbnews));
//刷新數(shù)據(jù)
listadpter.notifyDataSetInvalidated();
}
});
// 第一次加載的數(shù)據(jù)
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;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ListView android:id="@+id/newsShow_list" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > <Button android:id="@+id/adddata" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="添加數(shù)據(jù)" /> <Button android:id="@+id/loadmore_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/loadmore" /> </LinearLayout> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="15dp" android:orientation="horizontal" > <ImageView 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" /> <TextView android:id="@+id/txt_title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
下拉刷新
當ListView要顯示的數(shù)據(jù)過多時,為了更快的響應用戶,這個時候ListView進行分頁顯示再合適不過了。
ListView分頁顯示數(shù)據(jù)的原理其實很簡單,當用戶滑到ListView最后一項時,通知異步線程進行加載下一頁的數(shù)據(jù),下一頁數(shù)據(jù)加載完成時,調(diào)用設置好的Adapter的notifyDataSetChange()方法,ListView顯示下一頁的數(shù)據(jù)。
現(xiàn)在有兩個問題要解決,第一個問題要知道用戶是否滑到了ListView的最后一項;第二個問題是如何提示用戶正在加載下一頁的數(shù)據(jù),讓用戶耐心等待。
解決第一個問題,我們只需自定義ListView,讓它實現(xiàn)OnScrollListener類監(jiān)聽ListView的滑動狀態(tài),以此來判斷是否滑動到了最后一項
這里只簡單說一下要點:
@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){
// 用戶已經(jīng)滑動到了ListView的最后一項
}
要解決第二個問題也是在onScroll()方法中來實現(xiàn)
@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 );//用來提示用戶正在加載下一頁的數(shù)據(jù)
isLoading = true ;
listener.loadData();
}
- Android程序開發(fā)之Listview下拉刷新上拉(滑動分頁)加載更多
- Android實現(xiàn)listview動態(tài)加載數(shù)據(jù)分頁的兩種方法
- Android ListView分頁功能實現(xiàn)方法
- Android應用中ListView利用OnScrollListener分頁加載數(shù)據(jù)
- Android操作SQLite數(shù)據(jù)庫(增、刪、改、查、分頁等)及ListView顯示數(shù)據(jù)的方法詳解
- Android中ListView如何分頁加載數(shù)據(jù)
- Android實現(xiàn)ListView分頁自動加載數(shù)據(jù)的方法
- android實現(xiàn)listview分頁的方法
- android listview優(yōu)化幾種寫法詳細介紹
- Android之ListView分頁加載數(shù)據(jù)功能實現(xiàn)代碼
相關文章
RecylerView實現(xiàn)流布局StaggeredGridLayoutManager使用詳解
這篇文章主要為大家詳細介紹了RecylerView實現(xiàn)流布局StaggeredGridLayoutManager使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09
android Retrofit2網(wǎng)絡請求封裝介紹
大家好,本篇文章主要講的是android Retrofit2網(wǎng)絡請求封裝介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Android頂部工具欄和底部工具欄的簡單實現(xiàn)代碼
Android頂部工具欄和底部工具欄的簡單實現(xiàn)代碼,需要的朋友可以參考一下2013-05-05
Android 實現(xiàn)IOS 滾輪選擇控件的實例(源碼下載)
這篇文章主要介紹了 Android 實現(xiàn)IOS 滾輪選擇控件的實例(源碼下載)的相關資料,需要的朋友可以參考下2017-03-03
搭建mac使用Charles抓包安卓app環(huán)境配置過程
這篇文章主要為大家介紹了mac使用Charles抓包,安卓app環(huán)境搭建的配置過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02

