在使用listview时,滑动加载可以提高效率,增加用户体验。
主要用到一个OnScrollListener
- publicstaticintSCROLL_STATE_IDLE=0;
- publicstaticintSCROLL_STATE_TOUCH_SCROLL=1;
- publicstaticintSCROLL_STATE_FLING=2;
- publicvoidonScrollStateChanged(AbsListViewview,intscrollState);
- publicvoidonScroll(AbsListViewview,intfirstVisibleItem,intvisibleItemCount,
- inttotalItemCount);
- packagecom.nico.listviewload;
- importjava.util.ArrayList;
- importjava.util.List;
- importcom.nico.bean.MsgInfo;
- importandroid.app.Activity;
- importandroid.os.AsyncTask;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.os.Message;
- importandroid.util.Log;
- importandroid.view.LayoutInflater;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.widget.AbsListView;
- importandroid.widget.BaseAdapter;
- importandroid.widget.LinearLayout;
- importandroid.widget.ListView;
- importandroid.widget.TextView;
- importandroid.widget.AbsListView.OnScrollListener;
- publicclassMainActivityextendsActivity{
- List<MsgInfo>infoList=null;
- privateLayoutInflaterinflater=null;
- privateListViewlistview=null;
- privatemyAdapteradapter=null;
- privateLinearLayoutftview=null;
- privateHandlerhandler=newHandler(){
- @Override
- publicvoidhandleMessage(Messagemsg){
- super.handleMessage(msg);
- switch(msg.what){
- case1:
- adapter.notifyDataSetChanged();
- try{
- Thread.sleep(2000l);
- }catch(InterruptedExceptione){
- e.printStackTrace();
- }
- setAdapter();
- break;
- }
- }
- };
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- inflater=this.getLayoutInflater();
- listview=(ListView)findViewById(R.id.listview);
- ftview=(LinearLayout)inflater.inflate(R.layout.ftview,null);
- listview.addFooterView(ftview,null,false);
- listview.setAdapter(newmyAdapter());
- adapter=newmyAdapter();
- ftview.setVisibility(View.VISIBLE);
- listview.setOnScrollListener(newOnScrollListener(){
- @Override
- publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
- if(scrollState==SCROLL_STATE_IDLE
- &&view.getLastVisiblePosition()==view.getCount()-1)
- {
- handler.sendEmptyMessage(1);
- }
- }
- @Override
- publicvoidonScroll(AbsListViewview,intfirstVisibleItem,
- intvisibleItemCount,inttotalItemCount){
- }
- });
- }
- publicList<MsgInfo>getList(){
- List<MsgInfo>infoList=newArrayList<MsgInfo>();
- for(inti=0;i<7;i++){
- MsgInfoinfo=newMsgInfo();
- info.id=i;
- info.detailinfo="这是第"+i+"条信息";
- info.name="第"+i+"项";
- info.size=1024*i;
- infoList.add(info);
- }
- returninfoList;
- }
- publicvoidsetData(){
- infoList=getList();
- }
- publicvoidsetAdapter(){
- for(inti=0;i<7;i++){
- MsgInfoinfo=newMsgInfo();
- info.id=i;
- info.detailinfo="这是第"+i+"条信息";
- info.name="第"+i+"项";
- info.size=1024*i;
- infoList.add(info);
- }
- adapter.notifyDataSetChanged();
- }
- publicclassmyAdapterextendsBaseAdapter{
- @Override
- publicvoidnotifyDataSetChanged(){
- if(ftview.getVisibility()==View.VISIBLE)
- {
- ftview.setVisibility(View.GONE);
- }
- elseif(ftview.getVisibility()==View.GONE)
- {
- ftview.setVisibility(View.VISIBLE);
- }
- super.notifyDataSetChanged();
- }
- TextViewname,detail,size;
- publicmyAdapter(){
- setData();
- }
- @Override
- publicintgetCount(){
- returninfoList.size();
- }
- @Override
- publicObjectgetItem(intposition){
- returninfoList.get(position);
- }
- @Override
- publiclonggetItemId(intposition){
- returnposition;
- }
- @Override
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- if(convertView==null){
- convertView=inflater.inflate(R.layout.item,null,false);
- }
- name=(TextView)convertView.findViewById(R.id.name);
- detail=(TextView)convertView.findViewById(R.id.detail);
- size=(TextView)convertView.findViewById(R.id.size);
- name.setText(infoList.get(position).name);
- detail.setText(infoList.get(position).detailinfo);
- size.setText(infoList.get(position).size+"");
- returnconvertView;
- }
- }
- publicclassLoadAsyTaskextendsAsyncTask<String,String,String>{
- @Override
- protectedStringdoInBackground(String...params){
- for(inti=0;i<7;i++){
- MsgInfoinfo=newMsgInfo();
- info.id=i;
- info.detailinfo="这是第"+i+"条信息";
- info.name="第"+i+"项";
- info.size=1024*i;
- infoList.add(info);
- }
- returnnull;
- }
- @Override
- protectedvoidonPostExecute(Stringresult){
- super.onPostExecute(result);
- ftview.setVisibility(View.GONE);
- adapter.notifyDataSetChanged();
- }
- }
- }
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"android:layout_height="match_parent">
- <LinearLayoutandroid:layout_width="fill_parent"android:gravity="center_horizontal"
- android:layout_height="wrap_content"android:layout_gravity="center_horizontal">
- <ImageViewandroid:layout_width="50dip"
- android:layout_height="50dip"
- android:src="@drawable/progressbar"android:id="@+id/pbdrawable"/>
- <TextViewandroid:layout_width="wrap_content"
- android:layout_height="wrap_content"android:text="请稍后..."android:id="@+id/pbtxt"/>
- </LinearLayout>
- </LinearLayout>
- <?xmlversion="1.0"encoding="utf-8"?>
- <rotatexmlns:android="http://schemas.android.com/apk/res/android"
- android:pivotX="50%"android:pivotY="50%"android:fromDegrees="0"
- android:toDegrees="360">
- <shapeandroid:shape="ring"android:innerRadiusRatio="3"
- android:thicknessRatio="8"android:useLevel="false">
- <gradientandroid:type="sweep"android:useLevel="false"
- android:startColor="#000000"android:centerColor="#FFFFFF"
- android:centerY="0.50"android:endColor="#000000"/>
- </shape>
- </rotate>
分享到:
相关推荐
android中listview滚动加载的demo,通过监听事件实现滑动到底部自动加载更多数据
android Listview下拉刷新 上拉(滑动分页)加载更多,经典demo,供学习参考
http://blog.csdn.net/qq_32673327/article/details/52012327 这是关于Demo实现的博客
android自定义listview,实现了下拉刷新,滑动操作,以及上拉加载 。 demo是用android studio开发,测试
VideoListPlayer实现了在列表控件(ListView, RecyclerView)中加载并播放视频,并支持滑动时自动播放/暂停的功能 利用该项目,可以轻松实现类似Instagram的视频播放功能 注意:最低支持API 14以上 效果预览 ...
基于listView的树状列表实现, 向下滑动界面,从数据库里异步加载数据到listView显示
我们在看微博或是到网上商城如淘宝中购物时,每一个商家都会有很多商品,如果把某商家的所有商品都一次性加载过来,会造成手机卡顿,影响用户体验,所以每次加载少量数据,使用分页的形式,分多页加载,会很好的提高...
这个demo是有listview实现的,里面又ProgressBar提示正在加载的效果,还有listview显示列表数据,当道最地下面的时候,向上滑动页面,会有加载更多的功能及效果,实现分页的另一种效果
支持仿微信滑动删除,并且支持上拉加载更多数据,下拉刷新数据功能控件,里面有DEMO和APK,自己看吧,重新设置下分数
demo集刷新与滑动删除与一体,分享给大家 ,希望对大家有所帮助
Android market里软件列表,每页显示10条记录,没有显示上一页,下一页的按钮,依靠手滑动动态加载数据,当向下滚动时,最下边显示 Loading… 。数据加载结束,Loading底栏消失。关于ListView的分段显示,有现成的库...
Android应用开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页的形式来展示数据,个人觉得这样会有更好的用户体验。...
41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯...
安卓源码包android web应用Dialog对话框OCR图像识别listview相关EditText输入框Launcher 桌面45个合集: [四次元]Android Launcher 桌面分页滑动代码.rar [四次元]Android Launcher 源码修改可编译.rar [四次元]...
结合下拉刷新上拉加载与右滑删除做了一个demo,供大家学习,互相进步。
16 AsyncTask进度条加载网站数据到ListView 17 EditText插入QQ表情源码 18 OpenGL的一个简单的例子 19闹钟 20 指南针 21 重力感应 22 android 查询工具源代码 23 android进度条对话框Demo 24 Android实现渐显按钮的...
DEMO实现了上下滑动加载,并实现了item的每个item的单机事件
本demo是将更新的监听放在listview的foot中,通过底部按钮点击触发或者通过滑动事件监听,当滑动到列表最底部的时候触发。 有图有真像: 列表初始状态 触发加载 加载后 部分代码: MainActivity 代码如下: private ...
Android ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考; 如果我们当前的页面有多个接口、多种布局的话,我们一般的选择无非就是1、多布局;2、各种复杂滑动布局外面...
异步加载适配器,异步或线程获取图片,图片的一级缓存,滑动时停止加载等优化. AndroidStudio项目