xamarin:android自定义listview与按钮事件
问题描述:
我在android(xamarin)中创建自定义列表视图。我有行设计和适配器以及活动。每件事情都运行良好。 现在在排设计中我有一个图像按钮。 如果我需要它来打开一个新的活动,在哪里以及如何实现此Imagebutton的click事件。 请注意,行点击事件效果很好,它正在做它应该做的事情。 我试图在适配器get view中实现Imagebutton点击,但问题是它在这个代码中多次输入不正确。xamarin:android自定义listview与按钮事件
这是我的适配器代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace SocrateMobile.Droid.Adapter
{
class PulledItemList_Adapter : BaseAdapter<oneimg_twolbl>
{
private Activity context;
private List<oneimg_twolbl> AllItemList;
public PulledItemList_Adapter(Activity context, List<oneimg_twolbl> AllItemList)
{
this.AllItemList = AllItemList;
this.context = context;
}
public oneimg_twolbl GetItem_bypos(int position)
{
return AllItemList[position];
}
public override oneimg_twolbl this[int position]
{
get { return AllItemList[position]; }
}
public override int Count
{
get { return AllItemList.Count; }
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
Holder_oneimg_twolbl holder = null;
var view = convertView;
if (view != null)
holder = view.Tag as Holder_oneimg_twolbl;
if (holder == null)
{
holder = new Holder_oneimg_twolbl();
view = context.LayoutInflater.Inflate(Resource.Layout.oneimg_twolbl, null);
holder.Text = view.FindViewById<TextView>(Resource.Id.text_list4_view);
holder.Text2 = view.FindViewById<TextView>(Resource.Id.text_list4_view2);
holder.Image = view.FindViewById<ImageButton>(Resource.Id.image_list4_view);
view.Tag = holder;
}
var current_item = AllItemList[position];
holder.Text.Text = current_item.FirstTxt;
holder.Text2.Text = current_item.SecondTxt;
holder.Image.SetImageResource(current_item.FirstImg);
holder.Image.Click += (sender, e) =>
{
int x = position;
};
return view;
}
public class Holder_oneimg_twolbl : Java.Lang.Object
{
public TextView Text { get; set; }
public TextView Text2 { get; set; }
public ImageButton Image { get; set; }
}
}
}
答
对于单个事件Occure你必须使用HasOnClickListeners
。
改变此密码
holder.Image.Click += (sender, e) =>
{
int x = position;
};
这个
if(!holder.Image.HasOnClickListeners)
{
holder.Image.Click += (sender, e) =>
{
int x = position;
};
}
更新:要实现以下方式方法的使用。
holder.Image.Click += delegate{
btnOneClick();
};
创建以这种方式工作
void btnOneClick(){
};
精细谢谢。但是有没有办法从活动中调用此事件?在eclipse中,我用来设置按钮onclicklistener并从活动中实现此侦听器。我可以在这里做同样的事吗? –
通过在您的活动中创建一个方法public void HandleButtonClick(object sender,EventArgs e){}并将其设置为适配器内的按钮单击事件,您可以在按钮中单击您的活动。 holder.Image.Click + = yourActivityInstance.HandleButtonClick; – HeisenBerg
@Ironman这个void btnoneclick是写在活动中的吗? –