带有单击事件的Xamarin Android创建按钮

时间:2019-04-01 09:29:25

标签: c# android-layout xamarin.android

我有以下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的按钮才能访问其点击事件?

我的代码必须能够处理具有各自按钮的多个项。

3 个答案:

答案 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
}