android 学习 ListView使用补充
2015-11-02 21:29
501 查看
前面两篇学习适配器的时候用的就是listview,主要是简单的添加,今晚在看了下listview滚动状态事件和动态加载数据,一个小demo。
listview的滚动状态主要有三种,onScrollStateChanged
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;
}
}
相关文章推荐
- 关于偏好设置文件的使用
- android学习之使用AIDL实现进程间的通讯
- 展讯7715 Android 平台编译
- 简单的Fragment使用(包括横竖屏)
- Android 中如何使用MVP设计模式
- [Android Lint] xxx is not translated in xxx 的解决方法
- 扫描周围可用蓝牙设备、以及设置蓝牙设备的可见性
- 关于Android中的的动画
- android ANR产生原因和解决办法
- Android 动画实践
- android--(内存管理、布局性能优化hierarchyviewer工具、viewStub(需要时显示))
- Android Layout_Gravity和Gravity
- 开源中国 OsChina Android 客户端源码分析(10)双击退出程序
- android中的逐帧动画
- 解决android中软件盘弹出导致的控件位置问题
- 【Android应用开发技术:用户界面】Android应用的本地化和国际化
- 今天学一招 android dimen中设置不带单位的数值
- android蓝牙的调试(博通蓝牙工作 and 低功耗模式)
- android 之 ExpandableListView列表中的列表
- Android 反编译详解