Android重点笔记,安卓listview 懒加载的实现笔记
1、實(shí)現(xiàn)目的與用途
使用懶加載可降低單次訪問后臺的所獲取的數(shù)據(jù)量,從而提高獲取數(shù)據(jù)的速度,減少流量使用,加快UI界面的響應(yīng),提高用戶體驗(yàn)度。
2、實(shí)現(xiàn)思路
兩種實(shí)現(xiàn)思路:
1、先設(shè)定listview每次加載的數(shù)據(jù)項(xiàng)數(shù),給listview底部項(xiàng)添加獲取更多按鈕,通過按
鈕的監(jiān)聽事件訪問后臺獲取更多數(shù)據(jù)后刷新listview。
2、先設(shè)定listview每次加載的數(shù)據(jù)項(xiàng)數(shù),通過監(jiān)聽listview的滑動事件,當(dāng)listview滑動至底部時(shí)訪問后臺服務(wù)獲取更多數(shù)據(jù),刷新listview顯示。
3、實(shí)現(xiàn)方法要點(diǎn)
1、布局文件中需添加listview控件
示例代碼
android:id="@+id/lv_apps"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:cacheColorHint="#00000000"
android:fastScrollEnabled="true"?/>
2、給加載更多按鈕設(shè)置布局文件
示例代碼
android:id="@+id/loadMoreButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="更多"
android:textColor="#000000"
android:textSize="25dp"
android:gravity="center"
android:background="#00000000"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"/>
3、加載更多按鈕的代碼實(shí)現(xiàn)關(guān)鍵代碼:
loadMoreView?=?getLayoutInflater().inflate(R.layout.loadmore,?null);
loadMoreButton?=?(Button)?loadMoreView
.findViewById(R.id.loadMoreButton);
lv.addFooterView(loadMoreView,null,false);//獲取加載更多按鈕并添加到listview的底部
//以下代碼監(jiān)聽加載更多按鈕
loadMoreButton.setOnClickListener(new?OnClickListener()?{
@Override
public?void?onClick(View?v)?{
//?TODO?Auto-generated?method?stub
//調(diào)用后臺接口獲取數(shù)據(jù)后更新列表
}
});
//以下代碼實(shí)現(xiàn)滑動列表時(shí)加載
·publicvoidonScroll(AbsListView?view,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount)?{
·this.visibleItemCount?=?visibleItemCount;
·visibleLastIndex?=?firstVisibleItem?+?visibleItemCount?-1;
·}
·publicvoidonScrollStateChanged(AbsListView?view,intscrollState)?{
·intitemsLastIndex?=?adapter.getCount()?-1;//數(shù)據(jù)集最后一項(xiàng)的索引
·intlastIndex?=?itemsLastIndex?+1;//加上底部的loadMoreView項(xiàng)
·if(scrollState?==?OnScrollListener.SCROLL_STATE_IDLE?&&?visibleLastIndex?==?lastIndex)?{
·//如果是自動加載,可以在這里放置異步加載數(shù)據(jù)的代碼
·Log.i("LOADMORE","loading...");
·}
·}
4、具體實(shí)現(xiàn)demo
1packagecom.scott.loadmore;
2
3importjava.util.ArrayList;
4
5importAndroid.app.ListActivity;
6importandroid.os.Bundle;
7importandroid.os.Handler;
8importandroid.util.Log;
9importandroid.view.View;
10importandroid.widget.AbsListView;
11importandroid.widget.AbsListView.OnScrollListener;
12importandroid.widget.Button;
13importandroid.widget.ListView;
14
15publicclassMainActivityextendsListActivityimplementsOnScrollListener?{
16privateListView?listView;
17privateintvisibleLastIndex?=0;//最后的可視項(xiàng)索引
18privateintvisibleItemCount;//?當(dāng)前窗口可見項(xiàng)總數(shù)
19privateListViewAdapter?adapter;
20privateView?loadMoreView;
21privateButton?loadMoreButton;
22privateHandler?handler?=newHandler();
23
24@Override
25publicvoidonCreate(Bundle?savedInstanceState)?{
26super.onCreate(savedInstanceState);
27setContentView(R.layout.main);
28
29loadMoreView?=?getLayoutInflater().inflate(R.layout.load_more,null);
30loadMoreButton?=?(Button)?loadMoreView.findViewById(R.id.loadMoreButton);
31
32listView?=?getListView();//獲取id是list的ListView
33
34listView.addFooterView(loadMoreView);//設(shè)置列表底部視圖
35
36initAdapter();
37
38setListAdapter(adapter);//自動為id是list的ListView設(shè)置適配器
39
40listView.setOnScrollListener(this);//添加滑動監(jiān)聽
41}
42
43
46privatevoidinitAdapter()?{
47ArrayList?items?=newArrayList();
48for(inti?=0;?i?<10;?i++)?{
49items.add(String.valueOf(i?+1));
50}
51adapter?=newListViewAdapter(this,?items);
52}
53
54
57@Override
58publicvoidonScroll(AbsListView?view,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount)?{
59this.visibleItemCount?=?visibleItemCount;
60visibleLastIndex?=?firstVisibleItem?+?visibleItemCount?-1;
61}
62
63
66@Override
67publicvoidonScrollStateChanged(AbsListView?view,intscrollState)?{
68intitemsLastIndex?=?adapter.getCount()?-1;//數(shù)據(jù)集最后一項(xiàng)的索引
69intlastIndex?=?itemsLastIndex?+1;//加上底部的loadMoreView項(xiàng)
70if(scrollState?==?OnScrollListener.SCROLL_STATE_IDLE?&&?visibleLastIndex?==?lastIndex)?{
71//如果是自動加載,可以在這里放置異步加載數(shù)據(jù)的代碼
72Log.i("LOADMORE","loading...");
73}
74}
75
76
80publicvoidloadMore(View?view)?{
81loadMoreButton.setText("loading...");//設(shè)置按鈕文字loading
82handler.postDelayed(newRunnable()?{
83@Override
84publicvoidrun()?{
85
86loadData();
87
88adapter.notifyDataSetChanged();//數(shù)據(jù)集變化后,通知adapter
89listView.setSelection(visibleLastIndex?-?visibleItemCount?+1);//設(shè)置選中項(xiàng)
90
91loadMoreButton.setText("load?more");//恢復(fù)按鈕文字
92}
93},2000);
94}
95
96
99privatevoidloadData()?{
100intcount?=?adapter.getCount();
101for(inti?=?count;?i?
102adapter.addItem(String.valueOf(i?+1));
103}
104}
105}
總結(jié)
以上是生活随笔為你收集整理的Android重点笔记,安卓listview 懒加载的实现笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps如何导入笔刷
- 下一篇: android listview set