Xamarin.Android ListView复用问题的解决办法

1、相信刚开始使用ListView都接触到过,就是比如ListView的item有一个Button或一个CheckBox,你明明点击按键改变了他的背景图片或者颜色,又或者勾选了CheckBox,但是你一滑动,发现下面你没操作的item也跟着改变了,然后你再滑动回去,结果原来item上面的操作又变没了,这就是ListView中item复用时产生的问题。
2、我的解决办法是直接继承使用系统的ListActivity类,说明下,继承自ListActivity类将自动创建一个ListView,并公开一个ListAdapter属性以提供要通过适配器显示的行视图。内置适配器采用视图资源ID作为参考。你可以使用内置资源(如 Android.Resource.Layout 中的资源),这样就无需编写你自己的资源。而且继承使用ListActivity类后,滑动时复用控件所产生的混乱问题也解决了。(注:我要的功能只是选择ListView的item,然后,返回对应item值就可以 ,如果你的布局要复杂,请参考这篇博文:https://blog.csdn.net/verzqli/article/details/50298999,很详细地介绍怎么解决复用时产生混乱的问题。)
3、利用ListActivity类可以解决滑动时产生混乱的问题,但是我在选择item返回行视图的时候,又遇到了一个新问题,ListView.GetChildAt(position)返回null(position为混动屏幕后,选择item所在的位置),这个问题应该也是ListView复用时产生的,如下图:
ListView.GetChildAt(position)返回为null的报错。
4、这个问题我的解决办法是:重写ListActivity的OnListItemClick()方法,该方法的原型是:protected override void OnListItemClick(ListView l, View v, int position, long id),第二个参数v 应该就是单击item返回的行视图view,有了这个view 就好办了,可以得到想要的资源ID的值了。
///实现选择复选标记后记录所选的项, 部分代码:

//定义lstselect 保存所选item
list<string> lstselect = new list<string>();

重写ListActivity的OnListItemClick()方法

protected override void OnListItemClick(ListView l, View v, int position, long id)
{
    bool IsChecked = l.IsItemChecked(position);
    //View vv= ListView.GetChildAt(position);
    //vv.FindViewById<TextView>(Android.Resource.Id.Text1);
    var Text1 =v.FindViewById<TextView>(Android.Resource.Id.Text1);
    if (IsChecked)
    {
        lstselect.Add(Text1.Text);
    }
    else
    {
        lstselect.Remove(Text1.Text);
    }
    base.OnListItemClick(l, v, position, id);
}

=======================================
参考博文:https://blog.csdn.net/verzqli/article/details/50298999

小弟刚学Android开发不久,对Android开发知识和架构不太了解,如果对这篇文章中的观点有不同看法的,欢迎留言,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值