Android中ListView分页加载数据.doc_第1页
Android中ListView分页加载数据.doc_第2页
Android中ListView分页加载数据.doc_第3页
Android中ListView分页加载数据.doc_第4页
Android中ListView分页加载数据.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android中ListView分页加载数据 Android应用开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页的形式来展示数据,个人觉得这样会有更好的用户体验。因此,很多应用都是采用分批次加载的形式来获取用户所需的数据。例如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个查看更多按钮,用户点击后,加载下一页数据。 下面通过一个Demo来展示ListView功能如何实现:该Demo通过在ListView列表的底部添加一个“查看更多.”按钮来加载新闻(模拟新闻客户端)分页数据。同时限定每次加载10条记录,但完全加载完数据后,就把ListView列表底部视图“查看更多.”删除。假设加载的数据总数为 38 条记录。先看下该Demo工程的程序结构图:其中包 com.andyidea.bean中News.java类是新闻实体类,包com.andyidea.listview中paginationListViewActivity.java类是用来展示ListView列表。布局layout中包含三个布局文件,分别为:list_item.xml , loadmore.xml , main.xml 。下面分别贴下源码:layout中的 list_item.xml源码:html view plaincopy1 2 7 11 15 layout中loadmore.xml源码:html view plaincopy16 17 21 26 layout中main.xml源码:html view plaincopy27 28 32 36 /LinearLayou 包 com.andyidea.bean中News.java类源码:html view plaincopy37 package com.andyidea.bean; 38 39 /* 40 * 新闻实体类 41 * author Andy.Chen 42 * mail Chenjunjun.ZJ 43 * 44 */ 45 public class News 46 47 private String title; /标题 48 private String content; /内容 49 50 public String getTitle() 51 return title; 52 53 public void setTitle(String title) 54 this.title = title; 55 56 public String getContent() 57 return content; 58 59 public void setContent(String content) 60 this.content = content; 61 62 63 包com.andyidea.listview中paginationListViewActivity.java类源码:html view plaincopy64 package com.andyidea.listview; 65 66 import java.util.ArrayList; 67 import java.util.List; 68 69 import com.andyidea.bean.News; 70 71 import android.app.Activity; 72 import android.os.Bundle; 73 import android.os.Handler; 74 import android.util.Log; 75 import android.view.View; 76 import android.view.ViewGroup; 77 import android.widget.AbsListView; 78 import android.widget.AbsListView.OnScrollListener; 79 import android.widget.BaseAdapter; 80 import android.widget.Button; 81 import android.widget.ListView; 82 import android.widget.TextView; 83 import android.widget.Toast; 84 85 public class PaginationListViewActivity extends Activity implements OnScrollListener 86 87 private ListView listView; 88 private int visibleLastIndex = 0; /最后的可视项索引 89 private int visibleItemCount; / 当前窗口可见项总数 90 private int datasize = 38; /模拟数据集的条数 91 private PaginationAdapter adapter; 92 private View loadMoreView; 93 private Button loadMoreButton; 94 private Handler handler = new Handler(); 95 96 /* Called when the activity is first created. */ 97 Override 98 public void onCreate(Bundle savedInstanceState) 99 super.onCreate(savedInstanceState); 100 setContentView(R.layout.main); 101 102 loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null); 103 loadMoreButton = (Button)loadMoreView.findViewById(R.id.loadMoreButton); 104 loadMoreButton.setOnClickListener(new View.OnClickListener() 105 106 Override 107 public void onClick(View v) 108 loadMoreButton.setText(正在加载中.); /设置按钮文字 109 handler.postDelayed(new Runnable() 110 111 Override 112 public void run() 113 loadMoreData(); 114 adapter.notifyDataSetChanged(); 115 loadMoreButton.setText(查看更多.); /恢复按钮文字 116 117 ,2000); 118 119 120 ); 121 122 listView = (ListView)findViewById(R.id.lvNews); 123 listView.addFooterView(loadMoreView); /设置列表底部视图 124 initializeAdapter(); 125 listView.setAdapter(adapter); 126 listView.setOnScrollListener(this); 127 128 129 Override 130 public void onScrollStateChanged(AbsListView view, int scrollState) 131 int itemsLastIndex = adapter.getCount()-1; /数据集最后一项的索引 132 int lastIndex = itemsLastIndex + 1; 133 if (scrollState = OnScrollListener.SCROLL_STATE_IDLE 134 & visibleLastIndex = lastIndex) 135 / 如果是自动加载,可以在这里放置异步加载数据的代码 136 137 138 139 140 Override 141 public void onScroll(AbsListView view, int firstVisibleItem, 142 int visibleItemCount, int totalItemCount) 143 this.visibleItemCount = visibleItemCount; 144 visibleLastIndex = firstVisibleItem + visibleItemCount - 1; 145 146 Log.e(= ,=); 147 Log.e(firstVisibleItem = ,firstVisibleItem+); 148 Log.e(visibleItemCount = ,visibleItemCount+); 149 Log.e(totalItemCount = ,totalItemCount+); 150 Log.e(= ,=); 151 152 /如果所有的记录选项等于数据集的条数,则移除列表底部视图 153 if(totalItemCount = datasize+1) 154 listView.removeFooterView(loadMoreView); 155 Toast.makeText(this, 数据全部加载完!, Toast.LENGTH_LONG).show(); 156 157 158 159 /* 160 * 初始化ListView的适配器 161 */ 162 private void initializeAdapter() 163 List news = new ArrayList(); 164 for(int i=1;i=10;i+) 165 News items = new News(); 166 items.setTitle(Title+i); 167 items.setContent(This is News Content+i); 168 news.add(items); 169 170 adapter = new PaginationAdapter(news); 171 172 173 /* 174 * 加载更多数据 175 */ 176 private void loadMoreData() 177 int count = adapter.getCount(); 178 179 if(count+10 = datasize) 180 for(int i=count+1; i=count+10; i+) 181 News item = new News(); 182 item.setTitle(Title+i); 183 item.setContent(This is News Content+i); 184 adapter.addNewsItem(item); 185 186 else 187 for(int i=count+1; i=datasize; i+) 188 News item = new News(); 189 item.setTitle(Title+i); 190 item.setContent(This is News Content+i); 191 adapter.addNewsItem(item); 192 193 194 195 196 197 198 class PaginationAdapter extends BaseAdapter 199 200 List newsItems; 201 202 public PaginationAdapter(List newsitems) 203 this.newsItems = newsitems; 204 205 206 Override 207 public int getCount() 208 return newsItems.size(); 209 210 211 Override 212 public Object getItem(int position) 213 return newsItems.get(position); 214 215 216 Override 217 public long getItemId(int position) 218 return position; 219 220 221 Override 222 public View getView(int position, View view, ViewGroup parent) 223 if(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论