大佬教程收集整理的这篇文章主要介绍了c# – Monodroid – 处理子事件上的事件重用的ListView行的视图,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Android的ListView重用已滚出视图的行.
但是,当在C#中处理行的子视图上的事件时,这似乎是一个问题.
在Java中添加事件处理程序的一种可接受的方法是显式设置一个像这样的处理程序:
ImageView img = (ImageView) row.findViewById(R.id.pic);
img.setOnClickListener(new View.onClickListener() {
public void onClick(View v) {
System.out.println(position);
}
});
Xamarin网站上的文档鼓励开发人员使用C#的add事件监听器模式,这种模式对重用行不起作用:
ImageView img = row.FindViewById
上面设置事件处理程序的Java模式非常适合于行重用,而在其下面添加事件处理程序的C#模式会导致处理程序堆积在重用行的子视图上.
下面的代码显示了我编写的自定义BaseAdapter中的GetView方法.
public override Android.Views.View GetView (int position,View convertView,ViewGroup parent)
{
View row = convertView;
//TODO: solve event listener bug. (reused rows retain events).
if (row == null) {
row = LayoutInflater.From (userListContext)
.Inflate (resource.Layout.UserListuser,null,falsE);
}
ImageView profilePic = row.FindViewById
问题是,当重用行时,profilePic视图仍然附加了原始的“click”处理程序.
有没有办法(a)消灭profilePic.Click或(b)使用Android的profilePic.SetOnClickListener Java模式与匿名函数?
或者,有没有更好的模式使用“点击”处理程序仍然可以访问正确的位置值?
使用setTag / getTag方法获取Clicked行内部的正确位置ClickView单击侦听器的方法:
profilePic.SetTag(resource.Id.profilePic,position);
profilePic.Click += async (object sender,EventArgs E) => {
int clickedPos = (int)(((Button)sender).GetTag (resource.Id.profilePiC));
Bundle extras = new Bundle();
extras.PutString("id",UserList[clickedPos].id);
......
};
以上是大佬教程为你收集整理的c# – Monodroid – 处理子事件上的事件重用的ListView行的视图全部内容,希望文章能够帮你解决c# – Monodroid – 处理子事件上的事件重用的ListView行的视图所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。