android中listview分批加载数据
16lz
2022-03-13
布局文件
<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/listView" /></RelativeLayout>
单项布局文件listview_item.xml
<?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" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="18sp" android:id="@+id/textView" /></LinearLayout>
页脚footer.xml
<?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="horizontal" > <ProgressBar android:id="@+id/c81_forthBar" android:layout_width="50dp" android:layout_height="wrap_content" style="?android:attr/progressBarStyle" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:textSize="20sp" android:text="@string/loading" /></LinearLayout>
主类
package cn.android.datapage;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ArrayAdapter;import android.widget.ListView;import cn.android.service.DataService;public class MainActivity extends Activity {private ListView listView;private List<String> data = new ArrayList<String>();//每次获取多少条数据private int number = 20;//总共有几页private int maxpage = 5;//判断是否加载完成private boolean loadfinish = true;private ArrayAdapter<String> adapter;private View footer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //取得页脚 footer = getLayoutInflater().inflate(R.layout.footer, null); listView = (ListView) findViewById(R.id.listView); //监听滚动事件 listView.setOnScrollListener(new ScrollListener()); //取得数据 data.addAll(DataService.getData()); //绑定数据 adapter = new ArrayAdapter<String>(this, R.layout.listview_item, R.id.textView, data); listView.addFooterView(footer); listView.setAdapter(adapter); listView.removeFooterView(footer); } private final class ScrollListener implements OnScrollListener {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stub}//正在滚动时调用@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {int lastItemId = listView.getLastVisiblePosition();//判断数据是否达到最后一条记录if ((lastItemId + 1) == totalItemCount) {if (totalItemCount > 0) {//当前页int currentpage = totalItemCount % number == 0 ? totalItemCount/number : totalItemCount/number + 1;int nextpage = currentpage + 1;if (nextpage < maxpage && loadfinish) {loadfinish = false;//添加页脚listView.addFooterView(footer);//线程异步加载数据new Thread(new Runnable() {@Overridepublic void run() {try {//创造网络延迟Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}List<String> result = DataService.getData();//发送数据handler.sendMessage(handler.obtainMessage(100, result));}}).start();}}}} } //通过handler对象来从子线程中获取数据 Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {//得到数据data.addAll((List<String>) msg.obj);//告诉listview更新数据了,要求显示adapter.notifyDataSetChanged();//删除页脚if (listView.getFooterViewsCount() > 0)listView.removeFooterView(footer);loadfinish = true;} }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
取数据的类
package cn.android.service;import java.util.ArrayList;import java.util.List;/** * 提供数据 * @author Administrator * */public class DataService {public static List<String> getData() {List<String> data = new ArrayList<String>();for (int i = 0; i < 22; i++) {data.add("我就是数据"+i);}return data;}}
更多相关文章
- Android(安卓)tips2
- Android知识体系
- Android(安卓)数据和文件存储
- Android(安卓)数据和文件存储
- Android本地数据搜索实现
- Android(安卓)计时器 分:秒:毫秒 http://download.csdn.net/detail
- android 简单的上拉加载实现
- Android下ContentProvider 学习总结
- mybatisplus的坑 insert标签insert into select无参数问题的解决