Android的ListView简单的自定义上拉加载
来源:互联网 发布:淘宝联盟的意思 编辑:程序博客网 时间:2024/04/29 20:49
啥都不多说,直接上代码,自己看注释
MainActivity的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" /></RelativeLayout>
加载中(loading)的那个布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="20dip" android:paddingTop="20dip" android:visibility="gone"> <ProgressBar android:id="@+id/progressBar2" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <TextView android:id="@+id/loadmore_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="数据加载中..." android:textSize="18dip" /></LinearLayout>
这是主要的逻辑代码
package com.xzw.demo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;public class MainActivity extends Activity implements OnScrollListener { private static final String TAG = "MainActivity"; private ListView listView; private View moreView; //加载更多页面 private SimpleAdapter adapter; private ArrayList<HashMap<String, String>> listData; private int lastItem; private int count; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView); moreView = getLayoutInflater().inflate(R.layout.load, null); listData = new ArrayList<HashMap<String,String>>(); //准备数据,先给list添加假数据 prepareData(); count = listData.size(); adapter = new SimpleAdapter(this, listData,R.layout.item, new String[]{"itemText"}, new int[]{R.id.itemText}); //添加底部view,一定要在setAdapter之前添加,否则会报错。 listView.addFooterView(moreView); listView.setAdapter(adapter); //设置adapter //设置listview的滑动事件监听,如果在Fragment等非Activity中可以直接new出来 listView.setOnScrollListener(this); } //添加假数据 private void prepareData(){ for(int i=0;i<10;i++){ HashMap<String, String> map = new HashMap<String, String>(); map.put("itemText", "测试数据"+i); listData.add(map); } } /** * 加载更多的数据,count是用设置每次加载开始的位置,每次加载5条 */ private void loadMoreData(){ count = adapter.getCount(); for(int i=count;i<count+5;i++){ HashMap<String, String> map = new HashMap<String, String>(); map.put("itemText", "测试数据"+i); listData.add(map); } count = listData.size(); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { Log.i(TAG, "firstVisibleItem="+firstVisibleItem+"\nvisibleItemCount="+ visibleItemCount+"\ntotalItemCount"+totalItemCount); lastItem = firstVisibleItem + visibleItemCount - 1; //减1是因为上面加了个addFooterView } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { Log.i(TAG, "scrollState="+scrollState); //下拉到空闲是,且最后一个item的数等于数据的总数时,进行更新 if(lastItem == count && scrollState == this.SCROLL_STATE_IDLE){ Log.i(TAG, "拉到最底部"); moreView.setVisibility(view.VISIBLE); mHandler.sendEmptyMessage(0); } } //声明Handler,由于是假数据,上拉时先睡几秒 private Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } loadMoreData(); //加载更多数据,这里可以使用异步加载 adapter.notifyDataSetChanged(); moreView.setVisibility(View.GONE); if(count >=listData.size() ){ Toast.makeText(MainActivity.this, "木有更多数据!", 3000).show(); listView.removeFooterView(moreView); //移除底部视图 } Log.i(TAG, "加载更多数据"); break; case 1: break; default: break; } }; };}
0 0
- Android的ListView简单的自定义上拉加载
- Android : 自定义上拉加载的ListView
- 自定义listview的上拉加载更多
- 简单的ListView上拉加载
- listView 上拉加载更多 和 加载样式的自定义
- [Android]自定义ListView:上拉加载更多
- 自定义listView 的下拉刷新上拉加载
- 自定义控件-下拉刷新和上拉加载的listView
- 自定义listview的下拉刷新和上拉加载
- 自定义ListView的下拉刷新和上拉加载更多
- android 简单的上拉加载实现
- Android自定义控件——ListView的下拉刷新与上拉加载
- Android自定义控件——ListView的下拉刷新与上拉加载
- Android自定义控件——ListView的下拉刷新与上拉加载
- Android自定义控件——ListView的下拉刷新与上拉加载
- Android自定义控件——ListView的下拉刷新与上拉加载
- Android自定义控件——ListView的下拉刷新与上拉加载
- Android自定义控件——ListView的下拉刷新与上拉加载
- HDU 2955
- 当使用json写map对象时里面的重复对象会变成引用,导致前段取不到
- [51nod月赛19C]集合对
- 阿里云 EDAS-HSF 用户指南
- iOS流媒体开发之一:总结系统提供的接口
- Android的ListView简单的自定义上拉加载
- 1031学习记录 形参列表使用class进行封装
- 全屏及退出全屏
- [Extjs modern] 如何在gridpanel的列中添加按钮
- ShareREC for Unity3D用于Unity3D平台上的屏幕录制。
- Integer.parseInt() 和valueOf 的区别
- php小案例PDO增删改查,菜鸟好工具
- spring-07-如何解决中文接收乱码问题
- STD*_FILENO 和 std*的区别