ListView的分页加载
来源:互联网 发布:java归并排序算法 编辑:程序博客网 时间:2024/05/14 23:32
介绍一下ListView的分页加载
一共是三个类,一个是Mainactivity一个是News(数据)一个是MyAdapter(适配器)
要写三个xml文件,一个是activity_main,里面只需要写一个ListView给个id就可以了,第二个是adapter,
<?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:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="23sp" android:gravity="center_vertical" android:text="aaaaaaa" /><TextView android:id="@+id/body" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bbbbbbbbb" android:textSize="14sp" android:layout_marginTop="5dp" /></LinearLayout>
第三个是footerview,就是当前页面最底部的那个加载更多的按钮,
<?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" > <Button android:id="@+id/bt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击加载更多" /> <ProgressBar android:id="@+id/bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:visibility="gone" /></LinearLayout>
下面来看第一个News类
public class News {private String title;private String body;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}}非常的简单,自动生成的方法
第二个MyAdapter适配器的类
public class MyAdapter extends BaseAdapter{private Context ctx;private List<News> list;public MyAdapter(Context ctx,List<News> list) {this.list=list;this.ctx=ctx;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder hodler;if (convertView==null) {hodler=new ViewHolder();convertView=View.inflate(ctx, R.layout.adapter,null);hodler.title = (TextView) convertView.findViewById(R.id.title);hodler.body = (TextView) convertView.findViewById(R.id.body);convertView.setTag(hodler);}else {hodler=(ViewHolder) convertView.getTag();}hodler.title.setText(list.get(position).getTitle());hodler.body.setText(list.get(position).getBody());return convertView;}public static class ViewHolder{private TextView title,body;}}
最后一个就是Mainactivity了
public class MainActivity extends Activity implements OnScrollListener, OnClickListener {private List<News> list; private ListView lv; private View footerView;//底部的视图 private int maxNum=50;//模拟数据的最大值 private int lastVisible;//当前界面最后可见的条目private Button bt;private ProgressBar bar; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list=new ArrayList<News>(); lv = (ListView) findViewById(R.id.lv); footerView=View.inflate(this,R.layout.footerview,null); lv.addFooterView(footerView);//将底部视图添加到listviewbt = (Button) footerView.findViewById(R.id.bt);bar = (ProgressBar) footerView.findViewById(R.id.bar); initList();//初始化数据源 adapter = new MyAdapter(this, list); lv.setAdapter(adapter); bt.setOnClickListener(this); lv.setOnScrollListener(this); }Handler mHandler = new Handler(){public void handleMessage(android.os.Message msg) {super.handleMessage(msg);if (msg.what==0) {bar.setVisibility(View.GONE);bt.setVisibility(View.GONE);//调用加载更多的方法,刷新适配器loadMore();adapter.notifyDataSetChanged();}};};private void initList() {for (int i = 0; i < 10; i++) {News news = new News();news.setTitle("第"+(i+1)+"条数据");news.setBody("第"+(i+1)+"条数据");list.add(news);}}//每次增加多少的方法private void loadMore(){int count = adapter.getCount();//获得当前总共有多少条目if ((count+10)<maxNum) {for (int i = count; i < count+10; i++) {News nees = new News();nees.setTitle("第"+(i+1)+"条数据");nees.setBody("第"+(i+1)+"条数据");list.add(nees);}}else {//剩余条目不足10条时for(int i=count;i<maxNum;i++){News nees1=new News();nees1.setTitle("第"+(i+1)+"条数据");nees1.setBody("第"+(i+1)+"条数据");list.add(nees1);}}}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if (scrollState==SCROLL_STATE_IDLE&&lastVisible==adapter.getCount()) {bar.setVisibility(View.VISIBLE);bt.setVisibility(View.GONE);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry{Thread.sleep(3000);mHandler.sendEmptyMessage(0);}catch(Exception e){e.printStackTrace();}}}).start();}}/* * firstVisibleItem:当前界面显示的第一条item的下标,未完全显示也算 * visibleItemCount:当前界面内显示的item条数(未完全显示的也算) * totalItemCount:整个ListView全部的item的条目数 * */@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {lastVisible=firstVisibleItem+visibleItemCount-1;if (totalItemCount==maxNum+1) {lv.removeFooterView(footerView);Toast.makeText(this,"数据加载完成,无法更新",0).show();}}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbt.setVisibility(View.GONE);bar.setVisibility(View.VISIBLE);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry {Thread.sleep(3000);//子线程延迟发送一条空消息mHandler.sendEmptyMessage(0);} catch (Exception e) {e.printStackTrace();}}}).start();}}
这样就完成了一个简单的listview的分页加载,用的是虚拟数据
0 0
- ListView的分页加载
- ListView的分页加载
- ListView的分页加载
- listview 的分页加载
- listview的分页加载
- ListView的分页加载
- ListView的分页加载
- android listview的分页加载
- ListView的分页加载问题
- ListView的分批加载和分页加载
- android 实现listview的分页加载
- 实现ListView的分页加载功能
- android 实现listview的分页加载
- Listview分页加载数据的实现
- listview的分页加载-可直接运行
- Android 简单的listview分页加载
- ListView分页加载
- listview分页加载
- hdu5810——Balls and Boxes(数学推导)
- HDU 4778 Gems Fight!(博弈+状压)
- 【图形学与游戏编程】开发笔记-入门篇3:图形绘制
- deep features for text spotting 在windows上使用
- HDOJ 1789 Doing Homework again
- ListView的分页加载
- Java类
- Qt QToolTip详解
- 【杭电1081】To The Max
- Dijkstra 模板
- thinkphp注册
- 文章标题
- C++map关联容器
- 开发一个 App 有多难?说出来你可能不信!