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

先看效果

首先是模型类ListItem

  

public class ListItem
{
public string item{ get;set;}
}

然后是数据适配器类

//数据适配器类
public class ListViewAdapter:ArrayAdapter<ListItem>
{
public ListViewAdapter(Context context): base(context, )
{ } public override View GetView(int position, View convertView, ViewGroup parent)
{
View view;
if (convertView !=null)
{
view = convertView;
}
else
{
view = LayoutInflater.From(this.Context).Inflate(Resource.Layout.listItem, null);
} TextView tv = view.FindViewById<TextView>(Resource.Id.Itemstring); ListItem it = GetItem(position);
tv.Text = it.item;
return view;
} }

最后是创建主界面

public class Activity1 : Activity
{ public ListView listview;
public int visibleLastIndex = ; //最后的可视项索引
public int visibleItemCount; // 当前窗口可见项总数
public View loadMoreView; //更多视图
public ListViewAdapter adapter; //数据适配器
private Handler handler = new Handler();
List<ListItem> items = new List<ListItem>();
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
//在listview 后面加载更多是视图
loadMoreView = LayoutInflater.Inflate(Resource.Layout.Main,null); listview = FindViewById<ListView>(Resource.Id.listview); adapter = new ListViewAdapter(this);
//初始化
initAdapter(); listview.Adapter = adapter; listview.ScrollStateChanged += new EventHandler<AbsListView.ScrollStateChangedEventArgs>(listview_ScrollStateChanged);
//loadMoreButton.Click += new EventHandler(loadMoreButton_Click);
//在原有Listview的后面加上加载来的数据数据
listview.AddFooterView(loadMoreView);
}
//
void loadMoreClick()
{
//开启java 多线程加载更多
//开启委托
Action ac = new Action(getMore);
//runnable 只提供这一种构造方法……
handler.PostDelayed(new Runnable(ac){}, );
}
//加载更多初始化方法
void getMore()
{
LoadData();
adapter.NotifyDataSetChanged();//数据集变化后,通知adapter
listview.SetSelection(visibleLastIndex - visibleItemCount + );//设置选中项
}
//加载更多获取数据方法
void LoadData()
{
int count = adapter.Count;
for (int i = ; i < count+; i++)
{
ListItem item = new ListItem();
item.item = i + "呵呵"+ i;
items.Add(item);
adapter.Add(item); } }
//滚动状态改变是发生
void listview_ScrollStateChanged(object sender, AbsListView.ScrollStateChangedEventArgs e)
{
ListView lv = sender as ListView;
this.visibleItemCount = lv.LastVisiblePosition - lv.FirstVisiblePosition;//当前窗口可见项总数
visibleLastIndex = lv.LastVisiblePosition+; //最后可视索引 int itemsLastIndex = adapter.Count-; //数据集最后一项的索引
int lastIndex = itemsLastIndex +; //加上底部的loadMoreView项 if (ScrollState.Idle == e.ScrollState && visibleLastIndex == lastIndex)
{
//如果自动加载,可以异步加载
loadMoreClick();
} } //初始化适配器
private void initAdapter()
{
for (int i = ; i < ; i++)
{
ListItem item = new ListItem();
item.item = i+"哈哈哈"+i;
items.Add(item);
adapter.Add(item);
}
}
}

其实就是在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. 关于python3.X 报"import urllib.request ImportError: No module named request"错误,解决办法

    #encoding:UTF-8 import urllib.request url = "http://www.baidu.com" data = urllib.request.u ...

  2. mysql备份文件注释乱码处理工具

    我们有时候需要做mysql数据库的注释,可是备份出来的是乱码,怎么办呢? 本工具软件来帮你的忙. 将GBK库备份后的文本文件中夹带的UTF8乱码转换为GBK编码,就不再乱码了. http://down ...

  3. LXD 2.0 系列(四):资源控制

    LXD 提供了各种资源限制.其中一些与容器本身相关,如内存配额.CPU 限制和 I/O 优先级.而另外一些则与特定设备相关,如 I/O 带宽或磁盘用量限制.-- Stéphane Graber 本文导 ...

  4. java 中与 或 非 异或 和位移运算

    与(&) 或(|) 异或(^) 和位移(>>,<<) 通常和符号位无关 .. 但是非比较特殊,与符号位有关,所以计算的时候要考虑符号位 先扩展为32字符,前16位为符号 ...

  5. Java中抽象类和接口的区别

    转载自:http://dev.yesky.com/436/7581936.shtml 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种 ...

  6. vpn速度太慢?先从本地网络着手

    使用VPN,用户们抱怨的最多的是速度太慢这个问题,导致网页打不开或者打开缓慢,游戏延迟变高或者根本无法游戏,甚至无法连接等.那么我们今天就来全面解析下VPN的速度是由什么因素引起的. vpn速度过慢 ...

  7. 安装完ODAC,出现ORA-12560:TNS:协议适配器错误 12541 无监听程序的解决

    进入系统环境变量设置,查看Path路径,发现D:\oracle\product\11.2.0\client_1等路径放到了oracle11g数据库路径前面,将新加入的路径置后即可解决ORA-12560 ...

  8. C# 动态加载程序集dll (实现接口)

    一.程序集(接口程序集):LyhInterface.Dll namespace LyhInterface { public interface ILyhInterface { void Run(); ...

  9. [WPF]建立自适应窗口大小布局的WinForm窗口

    编写WinForm程序时,都会碰到一个问题.就是WinForm窗口在不同分辨率下的大小问题.举例说明,你编写的WinForm窗口在1024×768下是合适.匀称的.不过,如果用户的计算机的分辨率为14 ...

  10. Spring和mybatis整合后的mybais-config.xml配置

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC & ...