ListView 分頁(yè)加載更新實(shí)例分享
在實(shí)際運(yùn)用中往往會(huì)遇到一次性加載全部數(shù)據(jù)過(guò)多,需要分頁(yè)加載增加程序運(yùn)行效率!
本demo是將更新的監(jiān)聽(tīng)放在listview的foot中,通過(guò)底部按鈕點(diǎn)擊觸發(fā)或者通過(guò)滑動(dòng)事件監(jiān)聽(tīng),當(dāng)滑動(dòng)到列表最底部的時(shí)候觸發(fā)。
有圖有真像:
列表初始狀態(tài)

觸發(fā)加載

加載后

部分代碼:
MainActivity
private void initActivity() {
// TODO Auto-generated method stub
loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);
loadmore_btn = (Button) loadMoreView.findViewById(R.id.loadmore_btn);
loadmore_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
doUpdate();
}
});
listView = (ListView) findViewById(R.id.listView);
listView.addFooterView(loadMoreView);
initAdapter();
listView.setAdapter(adapter);
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
int itemsLastIndex = adapter.getCount() - 1;
int lastIndex = itemsLastIndex + 1;
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
&& visibleLast == lastIndex) {
// 可在這添加滑到列表底的時(shí)候異步自動(dòng)加載
// doUpdate();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
visibleCount = visibleItemCount;
visibleLast = firstVisibleItem + visibleItemCount - 1;
}
});
}
protected void doUpdate() {
// TODO Auto-generated method stub
loadmore_btn.setText("loading ...");
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
loadData();
adapter.notifyDataSetChanged();// 通知adapter數(shù)據(jù)變化
listView.setSelection(visibleLast - visibleCount + 1);
loadmore_btn.setText("Load More");
}
}, 2000);
}
private void loadData() {
// TODO Auto-generated method stub
int count = adapter.getCount();
for (int i = count; i < count + 10; i++) {
adapter.addItem(String.valueOf(i + 1));
}
}
private void initAdapter() {
// TODO Auto-generated method stub
List<String> items = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
items.add(String.valueOf(i + 1));
}
adapter = new ListAdapter(this, items);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
ListAdapter
public ListAdapter(Context context, List<String> items) {
this.items = items;
this.inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return items.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, null);
}
TextView textView = (TextView) convertView
.findViewById(R.id.list_item_text);
textView.setText(items.get(position));
return convertView;
}
/**
* 添加列表項(xiàng)
* @param item
*/
public void addItem(String item){
items.add(item);
}
提醒一下:要下載android-support-v4.jar 這個(gè)第三方的jar包哦! 這里就不提供下載了!
- ListView異步加載圖片實(shí)現(xiàn)思路
- ListView異步加載圖片實(shí)現(xiàn)思路(優(yōu)化篇)
- 基于Android ListView之加載使用技巧
- Android開(kāi)發(fā)之ListView列表刷新和加載更多實(shí)現(xiàn)方法
- Android中ListView異步加載圖片錯(cuò)位、重復(fù)、閃爍問(wèn)題分析及解決方案
- Android實(shí)現(xiàn)ListView異步加載圖片的方法
- 淺談Android開(kāi)發(fā)中ListView控件性能的一些優(yōu)化方法
- Listview加載的性能優(yōu)化是如何實(shí)現(xiàn)的
相關(guān)文章
詳解android 視頻圖片混合輪播實(shí)現(xiàn)
這篇文章主要介紹了android 視頻圖片混合輪播實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Android實(shí)現(xiàn)短信加密功能(發(fā)送加密短信、解密本地短信)
這篇文章主要介紹了android實(shí)現(xiàn)短信加密功能的相關(guān)資料,功能包括發(fā)送加密短信、解密本地短信,感興趣的小伙伴們可以參考一下2016-01-01Android 仿小米鎖屏實(shí)現(xiàn)九宮格解鎖功能(無(wú)需圖片資源)
最近公司要求做個(gè)九宮格解鎖,本人用的是小米手機(jī),看著他那個(gè)設(shè)置鎖屏九宮格很好看,就做了該組件,不使用圖片資源,純代碼實(shí)現(xiàn),感興趣的朋友參考下吧2016-12-12Android自定義Chronometer實(shí)現(xiàn)短信驗(yàn)證碼秒表倒計(jì)時(shí)功能
這篇文章主要介紹了Android自定義ChronometerView實(shí)現(xiàn)類(lèi)似秒表倒計(jì)時(shí),短信驗(yàn)證碼倒計(jì)時(shí)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android通過(guò)手機(jī)拍照或從本地相冊(cè)選取圖片設(shè)置頭像
微信、QQ、微博等社交類(lèi)APP如何更換自己的頭像,這篇文章主要介紹了Android通過(guò)手機(jī)拍照或從本地相冊(cè)選取圖片設(shè)置頭像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android自定義ViewGroup實(shí)現(xiàn)淘寶商品詳情頁(yè)
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup實(shí)現(xiàn)淘寶商品詳情頁(yè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10android跑馬燈出現(xiàn)重復(fù)跳動(dòng)以及不滾動(dòng)問(wèn)題的解決方法
這篇文章主要介紹了android跑馬燈出現(xiàn)重復(fù)跳動(dòng)以及不滾動(dòng)問(wèn)題的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09