我有以下item.xml-
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/[id required here for click event.]"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
使用此布局模板,我在后面的代码中创建了多个项目-
public Item(string title, Button btn)
{
Text = title;
Button = btn;
}
public override View GetView(int position, View convertView)
{
var item = Items[position];
var view = convertView;
var contentItem = (Item)item;
view = _inflater.Inflate(Resource.Layout.ListViewContentItem, null);
var title = view.FindViewById<TextView>(Resource.Id.txtTitle);
var btn = view.FindViewById<Button>([button id??]);
title.Text = contentItem.Text;
btn = contentItem.Button;
return view;
}
我的理解是ID必须是唯一的,那么如何创建具有唯一ID的按钮才能访问其点击事件?
我的代码必须能够处理具有各自按钮的多个项。
答案 0 :(得分:1)
这很简单,您可以使用与TextView相同的方式使用id
因此您的按钮将如下所示:
<Button
android:id="@+id/buttonId"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
现在,在您的click事件中,即使在例如:
,您也可以使用排名参数来找出列表中哪个元素正在获得点击 var btn = view.FindViewById<Button>(Resource.Id.buttonId);
btn.Clicked+= (s,e)=>
{
if(position==someValue)
{//Code}
else
{//Code}
};
答案 1 :(得分:0)
您可以在GetView方法中编写以下代码:
var btn = view.FindViewById<Button>(Resource.Id.buttonId);
btn.Tag=position;
btn.SetOnClickListener(this);
在适配器中实现“ View.IOnClickListener”并覆盖Onclick方法
public void OnClick(View v)
{
switch (v.Id)
{
case Resource.Id.buttonId:
//Write code here
break;
}
}
答案 2 :(得分:0)
在您的XML中:
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
针对您的活动:
Button btn = view.FindViewById<Button>(Resource.Id.btn);
btn.Clicked+= btn_click;
private void LiveLeadSearch_Click(object sender, EventArgs e)
{
//Your implementation
}