您的位置:首页 > 移动开发 > Android开发

android 学习 ListView使用补充

2015-11-02 21:29 501 查看
  前面两篇学习适配器的时候用的就是listview,主要是简单的添加,今晚在看了下listview滚动状态事件和动态加载数据,一个小demo。

listview的滚动状态主要有三种,onScrollStateChanged

SCROLL_STATE_IDLE空闲状态,既是滚动停止状态

SCROLL_STATE_FLING滚动状态,既是滚动中的状态

SCROLL_STATE_TOUCH_SCROLL触摸后滚动,刚开始滚动的状态

/**
*Callbackmethodtobeinvokedwhilethelistvieworgridviewisbeingscrolled.Ifthe
*viewisbeingscrolled,thismethodwillbecalledbeforethenextframeofthescrollis
*rendered.Inparticular,itwillbecalledbeforeanycallsto
*{@linkAdapter#getView(int,View,ViewGroup)}.
*
*@paramviewTheviewwhosescrollstateisbeingreported
*
*@paramscrollStateThecurrentscrollstate.Oneof{@link#SCROLL_STATE_IDLE},
*{@link#SCROLL_STATE_TOUCH_SCROLL}or{@link#SCROLL_STATE_IDLE}.
*/

onScroll函数应该是滚动完成后的回调函数

firstVisibleItem该页面第一个可视索引

visibleItemCount该页面显示的列表个数

totalItemCount整个listview的item个数

源码注释

*Callbackmethodtobeinvokedwhenthelistorgridhasbeenscrolled.Thiswillbe
*calledafterthescrollhascompleted

*@paramviewTheviewwhosescrollstateisbeingreported
*@paramfirstVisibleItemtheindexofthefirstvisiblecell(ignoreif
*visibleItemCount==0)
*@paramvisibleItemCountthenumberofvisiblecells
*@paramtotalItemCountthenumberofitemsinthelistadaptor


adapter.notifyDataSetChanged()  是适配器数据改变之后需要通过该函数,通知listview

知道这两个回调,就可以做到动态加载数据了,既是在滚动完成后,判断是否到达末尾,如果到达末尾就添加进一个数据,然后通知listview更新。



publicclassArrayAdapterActivityextendsActivity{

privateListViewlistView;
privateArrayAdapter<String>adapter;
privateArrayList<String>list;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_array_adapter);
listView=(ListView)findViewById(R.id.listView3);
list=newArrayList<String>();
adapter=newArrayAdapter(this,android.R.layout.simple_list_item_1,getData());
listView.setAdapter(adapter);
listView.setOnScrollListener(newAbsListView.OnScrollListener(){
@Override
publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
switch(scrollState){
caseAbsListView.OnScrollListener.SCROLL_STATE_IDLE:{
Log.i("scroll","空闲状态");
break;
}
caseAbsListView.OnScrollListener.SCROLL_STATE_FLING:{
Log.i("scroll","滚动状态");
break;
}
caseAbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:{
Log.i("scroll","触摸后滚动");
break;
}
}
}
@Override
publicvoidonScroll(AbsListViewview,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount){
if(firstVisibleItem+visibleItemCount==totalItemCount){
Log.i("scroll","到达底部");
list.add(""+list.size());
adapter.notifyDataSetChanged();
}
}
});
}
ArrayList<String>getData(){
for(inti=0;i<40;i++){
list.add(""+i);
}
returnlist;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: