ListView分页显示 上拉加载更多
2016-08-05 10:27
351 查看
这是程序实现的效果
现在来分析是如何做到的
先来配置footermore的布局文件
很简单就是一个progressbar和一个textview
然后新建一个LoadListView来将其加载。
此段代码先重写了Listview的3个构造方法,然后用一个initview()方法来加载底部布局用布局构造器LayoutInflater类来实现,然后调用listview的addFooterView方法。开始时先将底部布局设置为隐藏,再在下拉时间中将其显示出来。我们来看代码 重写了listview的onScrollListener方法,监听事件里面有两个值得注意的方法
先看onScroll()方法带有四个参数 根据名称很好看出参数的含义 view ,开始项,可见项的个数,总个数。我们定义一个lastVisibieItem = firstVisibleItem + visibleItemCount;等于开始项加可见项个数。来判断下拉是否到底了。if (totalItemCount == lastVisibieItem && scrollState == SCROLL_STATE_IDLE)当到底了,且停止滚动了。就加载底部布局。
因为改变ui不能再子线程中完成 所以我们,调用一个接口IloadListener 并在主线程中实现其的onLoad方法来加载底部布局。
listview类
在ListViewTest中实现
还有主布局listviewtest.xml
原文地址:http://blog.csdn.net/tangsilian/article/details/51200628
现在来分析是如何做到的
先来配置footermore的布局文件
<?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="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/footer_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:orientation="horizontal" > <ProgressBar style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载,请稍等。。。" /> </LinearLayout> </LinearLayout>
很简单就是一个progressbar和一个textview
然后新建一个LoadListView来将其加载。
public class LoadListView extends ListView implements OnScrollListener { private View footer;// 底部布局 int totalItemCount;// 总数量 int lastVisibieItem;// 最后一个可见的item; boolean isLoading;// 判断变量 IloadListener iLoadListener;// 接口变量 public LoadListView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public LoadListView(Context context) { super(context); initView(context); } public LoadListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(context); // TODO Auto-generated constructor stub } // listview加载底部布局 private void initView(Context context) { LayoutInflater inflater = LayoutInflater.from(context); footer = inflater.inflate(R.layout.footermore, null); // 设置隐藏底部布局 footer.findViewById(R.id.footer_layout).setVisibility(View.GONE); this.addFooterView(footer); this.setOnScrollListener(this); } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if (totalItemCount == lastVisibieItem && scrollState == SCROLL_STATE_IDLE) { if (!isLoading) { isLoading = true; footer.findViewById(R.id.footer_layout).setVisibility(View.VISIBLE); // 加载更多(获取接口) iLoadListener.onLoad(); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub this.lastVisibieItem = firstVisibleItem + visibleItemCount; this.totalItemCount = totalItemCount; } public void setInterface(IloadListener iLoadListener) { this.iLoadListener = iLoadListener; } // 加载更多数据的回调接口 public interface IloadListener { public void onLoad(); } // 加载完成通知隐藏 public void loadComplete() { isLoading = false; footer.findViewById(R.id.footer_layout).setVisibility(View.GONE); } }
此段代码先重写了Listview的3个构造方法,然后用一个initview()方法来加载底部布局用布局构造器LayoutInflater类来实现,然后调用listview的addFooterView方法。开始时先将底部布局设置为隐藏,再在下拉时间中将其显示出来。我们来看代码 重写了listview的onScrollListener方法,监听事件里面有两个值得注意的方法
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if (totalItemCount == lastVisibieItem && scrollState == SCROLL_STATE_IDLE) { if (!isLoading) { isLoading = true; footer.findViewById(R.id.footer_layout).setVisibility(View.VISIBLE); // 加载更多(获取接口) iLoadListener.onLoad(); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub this.lastVisibieItem = firstVisibleItem + visibleItemCount; this.totalItemCount = totalItemCount; }
先看onScroll()方法带有四个参数 根据名称很好看出参数的含义 view ,开始项,可见项的个数,总个数。我们定义一个lastVisibieItem = firstVisibleItem + visibleItemCount;等于开始项加可见项个数。来判断下拉是否到底了。if (totalItemCount == lastVisibieItem && scrollState == SCROLL_STATE_IDLE)当到底了,且停止滚动了。就加载底部布局。
因为改变ui不能再子线程中完成 所以我们,调用一个接口IloadListener 并在主线程中实现其的onLoad方法来加载底部布局。
listview类
public class ListviewItem { private String name; private int imageid; public ListviewItem(String name, int imageid) { super(); this.name = name; this.imageid = imageid; } public String getName() { return name; } public int getImageid() { return imageid; } }
在ListViewTest中实现
public class ListViewTest extends Activity implements IloadListener { private LoadListView listview; private List<ListviewItem> listviewitems = new ArrayList<ListviewItem>(); private ItemAdapter adapter; private int count = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listviewtest); listview = (LoadListView) findViewById(R.id.listview); adapter = new ItemAdapter(this, R.layout.listview_items, listviewitems); listview.setAdapter(adapter);// 加载适配器 listview.setInterface(this);//将接口传进来 initItems();// 初始化数据 } private void initItems() { // TODO Auto-generated method stub for(int i=0;i<15;i++){ ListviewItem listviewitem1 = new ListviewItem("初始化的"+i, R.drawable.ic_launcher); listviewitems.add(listviewitem1); } } // 获取更多数据 通知listview显示 @Override public void onLoad() { // 刷新太快 所以新启一个线程延迟两秒 Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 3; i++) { ListviewItem listviewitem1 = new ListviewItem("加载的" + count, R.drawable.ic_launcher); listviewitems.add(listviewitem1); count++; } // 通知listview加载完毕 listview.loadComplete(); } }, 2000); // TODO Auto-generated method stub } }
还有主布局listviewtest.xml
<LinearLayout 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" android:orientation="vertical" tools:context="com.example.demotest.MainActivity" > <com.example.demotest.LoadListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" > </com.example.demotest.LoadListView> </LinearLayout>
原文地址:http://blog.csdn.net/tangsilian/article/details/51200628
相关文章推荐
- 分组显示的ListView&分页加载数据
- UITableView 分页显示、加载更多,数据源远程数据,解析JSON,以及iOS☞Category
- 自定义ListView实现上拉分页加载更多数据
- UITableView 分页显示、加载更多,数据源远程数据,解析JSON,以及iOS☞Category
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- Android基础 为listView增加更多按钮(分页显示)
- ListView上拉加载更多(分页加载)
- 处女男学Android(六)---ListView上拉加载更多模拟获取分页数据
- Android ListView分页加载时图片显示问题
- android下listview的分页更多加载(效果非常实用)
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- listview下拉刷新 上拉(滑动分页)加载更多
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- Android_listview分页加载更多
- listview下拉刷新 上拉(滑动分页)加载更多
- listview下拉刷新 上拉(滑动分页)加载更多
- Android Demo之旅 ListView底部添加加载更多按钮实现数据分页
- android 仿google play效果,ListView/GridView下拉刷新,上拉加载更多,自动加载异步请求数据以及分页数据
- ListView显示数据库的数据-采用自定义布局-向上滑动可以加载更多数据
- listview下拉刷新 上拉(滑动分页)加载更多