ListView分页加载
2015-06-30 14:55
393 查看
1.总的思路是:用一个List来每次加载需要显示的数据。加载完后,此List要清空。
2.具体代码
3.效果
如图~
2.具体代码
public class MainActivity extends Activity implements OnClickListener { // 数据源 private String[] strs = new String[] { "1w", "de", "cdc", "vre", "vae", "cvds", "ergt", "trh", "jyyku", "yuk", "ytuuu", "koi", "awee", "qwe", "zdss", "oui", "hjg", "chcfg", "xcvsdr", "asfa", "fb", "breq", "WEGRG", "fsr", "awaw", "grtt", "trh", "nh", "xfds", "serew", "hn", "11322" }; // 临时存储需要加载的数据 private ArrayList<String> list = new ArrayList<String>(); private ListView listView = null; //上一页按钮 private Button bt_previousPage = null; //下一页按钮 private Button bt_nextPage = null; //显示当前是第几页 private TextView tv_currentPage = null; //显示总页数 private TextView tv_totalPage = null; // 总的数据条数 private int size = 0; // 当前页 private int page = 0; // 总页数 private int totalPages = 0; // 一页要显示的条数 private int pageSize = 10; //自定义显示的适配器 private StrAdapter adapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化控件 findViews(); // 得到总的数据条数 size = strs.length; // 得到总的页数 if (size % pageSize == 0) { totalPages = size / pageSize; } else { totalPages = size / pageSize + 1; } // 显示总页数 tv_totalPage.setText(totalPages + ""); // 开始分页显示 if (size > pageSize) { for (int i = 0; i < pageSize; i++) { //加载需要显示的数据 list.add(strs[i]); } //还需要显示的数据 size = size - pageSize; //当前页数+1 page++; } else { for (int i = 0; i < strs.length; i++) { list.add(strs[i]); } page++; } // 显示当前页数 tv_currentPage.setText(page + ""); // 绑定适配器显示数据 adapter = new StrAdapter(this, list); listView.setAdapter(adapter); // 监听点击事件 bt_previousPage.setOnClickListener(this); bt_nextPage.setOnClickListener(this); } // 加载下一页 public void getNextPageData() { if (size > pageSize) { list.clear(); for (int i = 0; i < pageSize; i++) { list.add(strs[i + page * 10]); } size = size - pageSize; page++; } else if (size > 0 && size <= pageSize) { list.clear(); for (int i = 0; i < size; i++) { list.add(strs[i + page * pageSize]); } size = size - pageSize; page++; } else { } // 更新当前页 tv_currentPage.setText(page + ""); } public void getPreviousPageData() { if (page >= 2) { list.clear(); for (int i = 0; i < 10; i++) { list.add(strs[i + (page - 2) * pageSize]); } page--; } else { } size = strs.length - page * pageSize; // 更新当前页 tv_currentPage.setText(page + ""); } @Override public void onClick(View v) { // TODO Auto-generated method stub if (v.getId() == R.id.bt_nextPage) { getNextPageData(); adapter.notifyDataSetChanged(); } else if (v.getId() == R.id.bt_previousPage) { getPreviousPageData(); adapter.notifyDataSetChanged(); } } public void findViews() { listView = (ListView) findViewById(R.id.listview); bt_previousPage = (Button) findViewById(R.id.bt_previousPage); bt_nextPage = (Button) findViewById(R.id.bt_nextPage); tv_currentPage = (TextView) findViewById(R.id.tv_currentPage); tv_totalPage = (TextView) findViewById(R.id.tv_totalPage); } } public class StrAdapter extends BaseAdapter { private Context context; private ArrayList<String> list = null; public StrAdapter(Context context,ArrayList<String> list){ super(); this.context = context; this.list = list; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(int position, View convertView, ViewGroup arg2) { // TODO Auto-generated method stub ViewHolder viewHolder = null; if (convertView == null) { View view = LayoutInflater.from(context).inflate( R.layout.str_adapter, null); viewHolder = new ViewHolder(); viewHolder.tv = (TextView) view.findViewById(R.id.tv_str); view.setTag(viewHolder); convertView = view; } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tv.setText(list.get(position).toString()); return convertView; } class ViewHolder { TextView tv; } }
3.效果
如图~
相关文章推荐
- ['LeetCode']表达式求值
- 程序调用存储过程中报错 DB2 SQL Error: SQLCODE=-286, SQLSTATE=42727, SQLERRMC=4096;
- Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:RELEASE from any of t
- 【译】VisionMobile:语音:脱离运营商的业务模式
- 基于实体模型开发主题管理简析
- AngularJS笔记
- php分析MSSQL返回的时间位object,怎样输出时间?
- windows 下apache 以fastcgi形式运行php
- Luajit2.0.4 Build错误
- jdk版本
- 为什么你应该停止使用EventBus
- 根据List中单个对象的某方法进行去重
- Trie树(字典树)(1)
- 跟我一起透彻理解template模板模式
- Android 监听EdText的变化,过滤显示数据
- OGRE在渲染通路中使用顶点程序和片断程序
- JS合并的必要性分析
- struts2 文件下载(修正中文问题)
- Hello,world!
- 使用Eclipse构建Maven项目 (step-by-step)