ListView实现分页功能
来源:互联网 发布:js连接mysql数据库 编辑:程序博客网 时间:2024/05/26 19:20
Android中ListView分页是比较常用的功能,当用户从网络上读取信息时候,如果一下子加载全部信息这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容。这时候,我们就可以采用ListView的分页。通过分页分次加载数据,用户看多少就去加载多少。
通常这也分为三种方式,一种是设置一个按钮,用户点击即加载。一种是当用户滑动到底部时自动加载(需要SrcollView查看为IDLE状态并比较已显示数和总数据)。还有一种是使用与下拉刷新类似的上拉刷新。
通常这也分为三种方式,一种是设置一个按钮,用户点击即加载。一种是当用户滑动到底部时自动加载(需要SrcollView查看为IDLE状态并比较已显示数和总数据)。还有一种是使用与下拉刷新类似的上拉刷新。
本文实现第一种。
最终效果如图示:
当没有数据时查看更多消失,本文设定了58个消息
主页面的ListView布局
< 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" > <ListView android:id= "@+id/mylv" android:layout_width= "fill_parent" android:layout_height= "wrap_content" /></ RelativeLayout>
ListView的items布局:
<? 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:layout_marginLeft= "10dp" /> <TextView android:id= "@+id/content" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_marginLeft= "20dp" /></ LinearLayout>
此页面显示是类似新闻客户端的ListView,一个是标题,一个是内容。
ListView的底部布局:
<? 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/btn" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:text ="查看更多" /></ LinearLayout>
一个简单的Button,显示为查看更多。
适配器代码:
public class MyAdapter extends BaseAdapter{ private List<News> myList; private Context context; public MyAdapter(List<News> _myList, Context _context) { this. myList = _myList; this. context = _context; } @Override public int getCount() { // TODO Auto-generated method stub return myList.size(); } @Override public Object getItem( int arg0) { // TODO Auto-generated method stub return myList.get(arg0); } @Override public long getItemId( int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView( int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub //此处可用Holder模式优化,偷个懒不写了 arg1 = LayoutInflater.from( context).inflate(R.layout. lv_items, null); TextView title = (TextView) arg1.findViewById(R.id.title ); TextView content = (TextView) arg1.findViewById(R.id.content ); title.setText( myList.get(arg0).getTitle()); content.setText( myList.get(arg0).getContent()); return arg1; } //查看更多时添加响应内容 public void addItems(News _news ){ myList.add( _news); }}
新闻实体类:
public class News { private String title; private String content; public String getTitle() { return title; } public void setTitle(String title) { this. title = title; } public String getContent() { return content; } public void setContent(String content) { this. content = content; } }
主页面的代码:
public class MainActivity extends Activity { private ListView mylv; //总数据长度 private int dataSize = 58; private MyAdapter adapter; //底部的查看更多 private View view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_main); List<News> news = new ArrayList<News>(); for( int i = 0; i < 10; i++){ News items = new News(); items.setTitle( "Title"+i); items.setContent( "This is News Content" +i); news.add(items); } mylv = (ListView)findViewById(R.id. mylv); //初始化底部的查询更多按钮 view = getLayoutInflater().inflate(R.layout.more_view , null); Button btn = (Button) view.findViewById(R.id. btn); btn.setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //加载更多数据 loadMore(); } }); mylv.addFooterView( view); //设置适配器 adapter = new MyAdapter(news, MainActivity. this); mylv.setAdapter( adapter); } //获取更多数据,实际开发中需要去从数据库当中取出来 private void loadMore(){ int count = adapter.getCount(); //如果未显示的数目小于10的话一次性加载全部 if(count + 10 > dataSize){ for( int i = count; i < dataSize; i++){ News items = new News(); items.setTitle( "Title"+i); items.setContent( "This is News Content"+i); adapter.addItems(items); } //去除查看更多的view mylv.removeFooterView( view); } else{ //每次增加10个 for( int i = count; i < count + 10; i++){ News items = new News(); items.setTitle( "Title"+i); items.setContent( "This is News Content"+i); adapter.addItems(items); } } adapter.notifyDataSetChanged(); }}
0 0
- ListView实现分页功能
- ListView实现分页功能
- ListView实现分页功能
- ListView实现分页功能
- ListView分页功能(2) 自定义View实现分页功能
- ListView实现分页功能【附Demo源码】
- ListView实现分页功能【附Demo源码】
- listview分页联系人,并实现打电话功能,
- 实现ListView的分页加载功能
- ListView 加载数据实现分页加载功能
- ListView结合DataPager实现分页的功能(数据绑定时)
- Android之ListView分页加载数据功能实现
- Android之ListView分页加载数据功能实现
- Android之ListView分页加载数据功能实现代码
- ListView分页功能(1)
- Listview 分页 实现
- Listview 分页 实现
- ListView实现简单分页
- Bitmap 位图索引原理
- Mybatis 示例之 TypeHandler
- java基础之 JDBC、DBUtils
- 监控摄像头主动应用一例
- 二、Oracle12c中的CDB与PDB
- ListView实现分页功能
- Shiro源码学习之ShiroFilter
- MVC三层模(struts+spring+hibernate(SSH)总结
- 实现图像处理算法中采用策略“Strategy”模式+Qt中相对路径
- 九度OJ题目1031:xxx定律
- (十三)装饰模式
- linux 信号发送简单用法
- 机器视觉代码大全
- SSH是怎么分工的