android中listview分批加载数据 一时失言乱红尘 2022-08-06 14:05 166阅读 0赞 布局文件 <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 { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } //正在滚动时调用 @Override public 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() { @Override public 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(){ @Override public 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; } }
还没有评论,来说两句吧...