Android-Listview(下拉刷新,底部加载更多,电影列表实例)
2015-08-31 00:39
561 查看
1.回顾
上篇学习了 Android 的手势识别的三种方式;普通识别和 自定义识别;2.重点
(1)ListView - 下拉刷新(2)ListView - 底部加载更多
(3)实例:电影列表 (Volley网络通信框架二次开发整合,显示电影列表,下拉刷新,加载更多)
3. 底部加载更多
3.1 基本思路
(1)底部布局实现(2)初始化布局 添加到 Listview
(3)判断滚动到底部
(4)设置监听:滚动底部 加载数据 并 显示 滚动条
(5)设置回调 函数 :进行数据加载
(6)加载完成 ,隐藏 滚动条
3.2 效果图
3.3 布局实现
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/load_more_view" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:gravity="center" android:minHeight="80dp" > <TextView android:id="@+id/load_more_tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="查看更多" android:textColor="@color/white" android:textSize="20sp" /> <LinearLayout android:id="@+id/loading_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" android:visibility="gone" > <ProgressBar style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="加载中..." android:textColor="@color/white" android:textSize="18sp" /> </LinearLayout> </RelativeLayout>
3.4 初始化布局
(1)使用到的变量//定义总数 item private int pageItem; //定义目前的总数 item private int items; //footer private View footer; //滚动条加载 private LinearLayout loading_layout; private TextView load_more_tv; //设置回调函数 private onloadfooterListener footerlistener;
(2) 使用 addFooterView(view) 方法 追加 布局到listview 最后
/初始化 footer footer=inflate(getContext(),R.layout.footer,null); //加载布局 实例话 loading_layout=(LinearLayout) footer.findViewById(R.id.loading_layout); load_more_tv=(TextView) footer.findViewById(R.id.load_more_tv); //加载进来 ,初始化完毕 addFooterView(footer);
3.5 实现 OnScrolllistener() 监听事件
(1)参数 firstVisiableItem : 第一个 item 的位置(2)参数 arg2 : 表示当前页 有多少个 item
(3)参数arg3 : 表示最后一个 item 的位置
(4)通过 arg3 = arg2+firstVisiableItem 来判断滑动到底部;
public void onScroll(AbsListView arg0, int firstVisiableItem, int arg2, int arg3) { firstItemIndex = firstVisiableItem; pageItem=firstVisiableItem+arg2; items=arg3; Log.i("arg",firstVisiableItem+""); Log.i("arg",arg2+""); Log.i("arg",arg3+""); }
(5)参数 agr1 :表示 当前滑动的状态
public void onScrollStateChanged(AbsListView arg0, int arg1) { Log.i("state1",arg1+""); Log.i("state2",MovieListview.SCROLL_STATE_IDLE+""); //当总数等于滑动的总数时和停止滑动时,到底部 if(pageItem==items && MovieListview.SCROLL_STATE_IDLE==arg1){ //加载数据 //定义接口实现,和刷新一样 footerlistener.onloadfooter(); //设置显示滚动条 loading_layout.setVisibility(View.VISIBLE); load_more_tv.setVisibility(View.GONE); } }
3.6 实现回调函数 和 数据加载完毕的调用
//回调函数 public interface onloadfooterListener{ public void onloadfooter(); } //通过外面调用 public void setOnloadfooterListener(onloadfooterListener footerlistener){ this.footerlistener=footerlistener; } //加载完成 调用 ,关闭 public void onloadfooterComplete(){ loading_layout.setVisibility(View.GONE); load_more_tv.setVisibility(View.VISIBLE); }
3.7 调用
(1)实现onloadfooterListener 接口(2)通过 异步任务进行加载 ,也可以使用 handler 实现
(3)数据加载完毕 ,调用onloadfooterComplete () 方法 ,关闭滚动条
class moveListFooterListener implements onloadfooterListener{ @Override public void onloadfooter() { //这里进行 加载数据操作 new AsyncTask<Void, Void, Void>() { protected Void doInBackground(Void... params) { try { Thread.sleep(2000); } catch (Exception e) { e.printStackTrace(); } pg++; if(pg>=4){ pg=1; } VolleyHandler<JSONObject> volleyHandler=new VolleyHandler<JSONObject>() { @Override public void reqSuccess(JSONObject response) { // 设置参数 String str="网络错误"; try { if(response.getString("msg").equals("success")&&response.getInt("code")==1){ //json解析 为 List<shared> JSONArray array=new JSONArray(response.getString("data")); for(int i=array.length()-1;i>=0;i--){ JSONObject object=(JSONObject) array.get(i); shared s=new shared(); s.setId(object.getInt("id")); s.setName(object.getString("name")+"& 底部加载的"); s.setPic(object.getString("pic")); s.setTotol(object.getString("totol")); list.add(list.size(),s); } //关闭滚动条 }else{ Show(response.getString("msg")); } } catch (JSONException e) { // 发生异常 Show(e.getMessage()); } } @Override public void reqError(String error) { Show(error.toString()); } }; VolleyHttpRequest.JsonObject_Request(VolleyHttpPath.getSharedTwo(pg), volleyHandler); return null; } @Override protected void onPostExecute(Void result) { //刷新数据 adapter.notifyDataSetChanged(); //提醒关闭底部滚动条 listview movie_list.onloadfooterComplete(); } }.execute(); } }
4. 下拉刷新
4.1 思路
(1)新建 header 布局(2)加载布局
(3)实现 onTouchListener() 和 onScrollListener()
(4)在 onTouchListener() 中判断 顶部状态,包括显示顶部布局,隐藏顶部布局
(5)滚动条的显示与隐藏 ,动画效果实现
4.2 效果图
4.3 实现
(1)实现和 底部加载更多 相似 ,可以自己模仿着自己写写,这里就不累赘了;(2)不过可以参考我的deMo
5. Volley 网络通信框架二次开发
文章地址:Android-Volley网络通信框架(二次封装数据请求和图片请求(包括处理请求队列和图片缓存))
http://blog.csdn.net/lablenet/article/details/47859613
6.deMo 下载
http://download.csdn.net/detail/lablenet/9063867相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories