今天项目经理找我说Listview加载更多的时候会出现一些问题,主要表现在会顿一下。让我我就去找Java的方法看看。自己写出了mono 的加载更多功能。和大家分享一下

先看效果

首先是模型类ListItem

  

  1. public class ListItem
  2. {
  3. public string item{ get;set;}
  4. }

然后是数据适配器类

  1. //数据适配器类
  2. public class ListViewAdapter:ArrayAdapter<ListItem>
  3. {
  4. public ListViewAdapter(Context context): base(context, )
  5. { }
  6.  
  7. public override View GetView(int position, View convertView, ViewGroup parent)
  8. {
  9. View view;
  10. if (convertView !=null)
  11. {
  12. view = convertView;
  13. }
  14. else
  15. {
  16. view = LayoutInflater.From(this.Context).Inflate(Resource.Layout.listItem, null);
  17. }
  18.  
  19. TextView tv = view.FindViewById<TextView>(Resource.Id.Itemstring);
  20.  
  21. ListItem it = GetItem(position);
  22. tv.Text = it.item;
  23. return view;
  24. }
  25.  
  26. }

最后是创建主界面

  1. public class Activity1 : Activity
  2. {
  3.  
  4. public ListView listview;
  5. public int visibleLastIndex = ; //最后的可视项索引
  6. public int visibleItemCount; // 当前窗口可见项总数
  7. public View loadMoreView; //更多视图
  8. public ListViewAdapter adapter; //数据适配器
  9. private Handler handler = new Handler();
  10. List<ListItem> items = new List<ListItem>();
  11. protected override void OnCreate(Bundle bundle)
  12. {
  13. base.OnCreate(bundle);
  14.  
  15. // Set our view from the "main" layout resource
  16. SetContentView(Resource.Layout.Main);
  17. //在listview 后面加载更多是视图
  18. loadMoreView = LayoutInflater.Inflate(Resource.Layout.Main,null);
  19.  
  20. listview = FindViewById<ListView>(Resource.Id.listview);
  21.  
  22. adapter = new ListViewAdapter(this);
  23. //初始化
  24. initAdapter();
  25.  
  26. listview.Adapter = adapter;
  27.  
  28. listview.ScrollStateChanged += new EventHandler<AbsListView.ScrollStateChangedEventArgs>(listview_ScrollStateChanged);
  29. //loadMoreButton.Click += new EventHandler(loadMoreButton_Click);
  30. //在原有Listview的后面加上加载来的数据数据
  31. listview.AddFooterView(loadMoreView);
  32. }
  33. //
  34. void loadMoreClick()
  35. {
  36. //开启java 多线程加载更多
  37. //开启委托
  38. Action ac = new Action(getMore);
  39. //runnable 只提供这一种构造方法……
  40. handler.PostDelayed(new Runnable(ac){}, );
  41. }
  42. //加载更多初始化方法
  43. void getMore()
  44. {
  45. LoadData();
  46. adapter.NotifyDataSetChanged();//数据集变化后,通知adapter
  47. listview.SetSelection(visibleLastIndex - visibleItemCount + );//设置选中项
  48. }
  49. //加载更多获取数据方法
  50. void LoadData()
  51. {
  52. int count = adapter.Count;
  53. for (int i = ; i < count+; i++)
  54. {
  55. ListItem item = new ListItem();
  56. item.item = i + "呵呵"+ i;
  57. items.Add(item);
  58. adapter.Add(item);
  59.  
  60. }
  61.  
  62. }
  63. //滚动状态改变是发生
  64. void listview_ScrollStateChanged(object sender, AbsListView.ScrollStateChangedEventArgs e)
  65. {
  66. ListView lv = sender as ListView;
  67. this.visibleItemCount = lv.LastVisiblePosition - lv.FirstVisiblePosition;//当前窗口可见项总数
  68. visibleLastIndex = lv.LastVisiblePosition+; //最后可视索引
  69.  
  70. int itemsLastIndex = adapter.Count-; //数据集最后一项的索引
  71. int lastIndex = itemsLastIndex +; //加上底部的loadMoreView项
  72.  
  73. if (ScrollState.Idle == e.ScrollState && visibleLastIndex == lastIndex)
  74. {
  75. //如果自动加载,可以异步加载
  76. loadMoreClick();
  77. }
  78.  
  79. }
  80.  
  81. //初始化适配器
  82. private void initAdapter()
  83. {
  84. for (int i = ; i < ; i++)
  85. {
  86. ListItem item = new ListItem();
  87. item.item = i+"哈哈哈"+i;
  88. items.Add(item);
  89. adapter.Add(item);
  90. }
  91. }
  92. }

其实就是在Listview滚动到底部是触发加载事件,加载事件向adapter 里面写入数据,adapter 状态改变的时候就会触发向Listview底部加数据的一个过程

这种实现方法很流畅。在项目中经常会用到

ListView 加载更多列表 Load More mono forandroid 项目笔记的更多相关文章

  1. Listview 加载更多

    JQM Listview 加载更多 demo - Warren的个人主页 JQM Listview 加载更多 Demo 测试数据1 测试数据2 测试数据3 测试数据4 显示更多 Page Footer ...

  2. PHP+Ajax点击加载更多列表数据实例

    一款简单实用的PHP+Ajax点击加载更多列表数据实例,实现原理:通过“更多”按钮向服务端发送Ajax请求,PHP根据分页参数查询将最新的几条记录,数据以JSON形式返回,前台Query解析JSON数 ...

  3. Android ListView加载更多

    先看效果: ListView的footer布局: <?xml version="1.0" encoding="utf-8"?> <Relati ...

  4. Listview加载更多是,恢复到原来的位置,如果不加特殊处理,总是跳转第一条

    1.记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复 listView.setOnScrollListener(new OnScrollListener ...

  5. LIstView 滚动 异步 加载更多 mono for android ScrollStateChanged ScrollState.Idle; Fling;TouchScroll

    今天项目需要实现一下列表的分页加载 找到了Listview的ScrollStateChanged方法. 和大家分享一下 //先找到Listview ListView order = FindViewB ...

  6. android ListView下拉刷新 上拉加载更多

    背景 最近在公司的项目中要使用到ListView的下拉刷新和上拉加载更多(貌似现在是个项目就有这个功能!哈哈),其实这个东西GitHub上很多,但是我感觉那些框架太大,而且我这个项目只用到了ListV ...

  7. ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多

    ListView实现Item上下拖动交换位置  并且实现下拉刷新  上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...

  8. ListView加载性能优化---ViewHolder---分页

    ListView是Android中一个重要的组件,可以使用它加列表数据,用户可以自己定义列表数据,同时ListView的数据加载要借助Adapter,一般情况下要在Adapter类中重写getCoun ...

  9. Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表

    本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...

随机推荐

  1. React-Native hello word 搭建及新手常见问题

    参考文档:http://reactnative.cn/docs/0.20/getting-started.html cmd 打开 敲入 1. npm config set registry https ...

  2. varnish

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  3. POJ 2135 Farm Tour 最小费用流

    两条路不能有重边,既每条边的容量是1.求流量为2的最小费用即可. //#pragma comment(linker, "/STACK:1024000000,1024000000") ...

  4. 如何查看SharePoint未知错误的详细信息

    在sharepoint 开发的时候,需要查看具体的sharepoint报错信息需要在配置文件中配置如下 通过下面方法就可以直接在出错页面查看错误信息.修改Web应用程序根目录上的Web.config文 ...

  5. exe文件放在其他位置

    set PATH=%PATH%;%UGII_ROOT_DIR%call "E:\ZY\exe\uds_rename_parts_mohao.exe"E:\ZY\exe\uds_re ...

  6. Jmeter在linux上运行(命令行运行Jmeter)

    1.下载安装 http://jmeter.apache.org/download_jmeter.cgi Jmeter官网下载 linux下应使用tgz包,下载  Binaries apache-jme ...

  7. JS-身份证号获取出生日期、性别、年龄

    var cardId=$("#cardId").val();//先获取身份证号(据自己实际写法获取) 1.获取出生日期: function getBirth(cardId){ va ...

  8. 国内及Github优秀开发人员列表

    自从入了Android软件开发的行道,解决问题和学习过程中免不了会参考别人的思路,浏览博文和门户网站成了最大的入口.下面这些列表取名为:国内及Github优秀开发人员列表,就是浏览后的成果. 虽然下述 ...

  9. mvc.net 的四种传值方式

    Control: view:

  10. 更改 Skype for Business Online 的 Sip 地址以匹配UPN

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...