listview的分页
来源:互联网 发布:清朗网络 青年力量海报 编辑:程序博客网 时间:2024/06/05 19:10
分页原理:
1、设置setOnScrollListener监听滑动到底部
// 设置listview的滚动监听 // 设置分页 lv.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: // 滚动停止(不一定到了底部) if (isBottom) { lv.addFooterView(footer); handler.postDelayed(new Runnable() { @Override public void run() { getNextData(); lv.removeFooterView(footer); } }, 3000); } break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING: break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { isBottom = ((firstVisibleItem + visibleItemCount) == totalItemCount); } });
2、lv.addFooterView和lv.removeFooterView的使用
lv.addFooterView(footer); lv.setAdapter(adapter); lv.removeFooterView(footer);// 移除掉
3、更新完数据刷新界面
notifyDataSetChanged();
示例demo一:
package com.example.administrator.mylistviewpager;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.SystemClock;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.ArrayAdapter;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;public class MainActivityIIIII extends AppCompatActivity { @BindView(R.id.listView_MainActivity) ListView lv; private ArrayList<String> data; private MyBaseAdapter adapter; private View footer;//加载视图:progressbar和textview提示 private static final int SUCCESS_GET_DATA = 0; private boolean finish = true; // 是否加载完成 private boolean isBottom; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mainiiii); ButterKnife.bind(this); adapter = new MyBaseAdapter(); //加载时提示 footer = View.inflate(getApplicationContext(), R.layout.footer, null); // 这里必须添加页脚让setAdapter里面满足 // if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0)条件 lv.addFooterView(footer); lv.setAdapter(adapter); lv.removeFooterView(footer);// 移除掉 // 设置listview的滚动监听 // 设置分页 lv.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 滚动停止(不一定到了底部) if (isBottom) { lv.addFooterView(footer); handler.postDelayed(new Runnable() { @Override public void run() { getNextData(); lv.removeFooterView(footer); } }, 3000); } break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING: break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { isBottom = ((firstVisibleItem + visibleItemCount) == totalItemCount); } }); } public void getNextData() { // 得到当前的记录数 int count = adapter.getCount(); List<String> datas = new ArrayList<String>(); for (int i = count; i < count + 20; i++) { datas.add("item" + i); } adapter.addData(datas); } //处理数据并绑定到view上 class MyBaseAdapter extends BaseAdapter { private List<String> list = new ArrayList<String>(); //1. 集合 : 数据源 // 第一次初始化,先加载第一屏幕,到19就开始加载 public MyBaseAdapter() { //2. 构造方法 for (int i = 0; i < 20; i++) { list.add("item" + i); } } @Override public int getCount() { return this.list.size(); } @Override public Object getItem(int position) { return this.list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertview, ViewGroup parent) { //3. 重写getView等方法 if (convertview == null) { convertview = getLayoutInflater().inflate(android.R.layout.simple_list_item_1, null); } // 默认系统布局android.R.layout.simple_list_item_1 ,id为android.R.id.text1 TextView textview = (TextView) convertview.findViewById(android.R.id.text1); textview.setText(this.list.get(position)); return convertview; } public void addData(List<String> items) { this.list.addAll(items); notifyDataSetChanged(); } }}
主界面布局:
<?xml version="1.0" encoding="utf-8"?><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_MainActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/holo_green_light" /></RelativeLayout>
footer.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="正在加载数据..........." android:textColor="@android:color/white" android:textSize="20sp" /></LinearLayout>
示例二:
参考:ListView“加载更多分页功能
LoadListView
public class LoadListView extends ListView implements AbsListView.OnScrollListener { private boolean isLoading;//正在加载 private OnLoadListener onLoadListener; private boolean canLoad; private LinearLayout footerContainer; public LoadListView(Context context) { this(context, null); } public LoadListView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public LoadListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); View footerLayout = LayoutInflater.from(context).inflate(R.layout.footer_layout, this, false); footerContainer = ((LinearLayout) footerLayout.findViewById(R.id.footer_container)); footerContainer.setVisibility(View.GONE); this.addFooterView(footerContainer); this.setOnScrollListener(this); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //到达底部且多于一页 canLoad = ((firstVisibleItem + visibleItemCount) == totalItemCount) && visibleItemCount < totalItemCount; if (canLoad && footerContainer.getVisibility() == GONE) { footerContainer.setVisibility(View.VISIBLE); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (canLoad && scrollState == SCROLL_STATE_IDLE) { if (!isLoading) { isLoading = true; footerContainer.setVisibility(View.VISIBLE); onLoadListener.onLoad(); } } } public void loadComplete() { isLoading = false; footerContainer.setVisibility(View.GONE); } public void setOnLoadListener(OnLoadListener onLoadListener) { this.onLoadListener = onLoadListener; } interface OnLoadListener { void onLoad(); }}
LoadActivity
public class LoadActivity extends AppCompatActivity { private ArrayList<String> lists; private LoadListView lv; private ArrayAdapter<String> adapter; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.load_act); lists = new ArrayList<>(); addDatas(lists); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, lists); lv = ((LoadListView) this.findViewById(R.id.lv)); lv.setAdapter(adapter); lv.setOnLoadListener(new LoadListView.OnLoadListener() { @Override public void onLoad() { handler.postDelayed(new Runnable() { @Override public void run() { addDatas(lists); adapter.notifyDataSetChanged(); lv.loadComplete(); } }, 500); } }); } private void addDatas(ArrayList<String> lists) { int nextInt = new Random().nextInt(100); for (int i = 0; i < 15; i++) { lists.add("" + nextInt + "我是第" + i + "条"); } }}
load_act.xml布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.joanzapata.android.pulldown.LoadListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/holo_green_light" android:divider="#ff0000" android:dividerHeight="5dp" /></RelativeLayout>
footer_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/footer_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/yellow" android:gravity="center" android:orientation="horizontal"> <ProgressBar android:layout_width="30dp" android:layout_height="30dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载数据..........." android:textColor="@android:color/white" android:textSize="20sp" /></LinearLayout>
阅读全文
0 0
- ListView的分页显示
- ListView的分页加载
- ListView的分页加载
- ListView分页的Demo
- ListView的分页加载
- listview 的分页加载
- listview的分页加载
- ListView的分页加载
- ListView的分页加载
- listview的分页
- Android中ListView的分页--自定义ListView
- android listview的分页加载
- ListView的分页加载问题
- Listview分页
- ListView分页
- listView分页
- ListView分页
- listview分页
- 条件阻塞Condition的应用
- Nginx配置proxy_pass转发的/路径问题
- applicationContext.xml配置hibernate 自动生成表失败
- 第6章 子过程
- fiddler网络调试神器(前端)——擦肩而过
- listview的分页
- 图像处理基本算法-立体视觉
- 合并文件夹二
- StringEscapeUtils类的转义与反转义方法
- 复习Android:笔记(一)工具下载(studio,jdk')和环境配置
- SQL
- 关于RFC 5681和《TCP/IP IIIustrated》在ssthresh(慢开始门限值)调整的区别
- zbar 使用报错
- Python 爬取豆瓣热映电影 (转载)