Создать кнопку с событием клика Xamarin Android - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть следующий 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;
    }

Насколько я понимаю, идентификаторы должны быть уникальными, так как я могу создавать кнопки с уникальными идентификаторами, чтобы иметь доступ к их событиям щелчка?

Мой код должен иметь возможность обрабатывать создание нескольких элементов, каждый со своими собственными кнопками.

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

Это просто, вы используете идентификатор так же, как вы использовали для TextView

Итак, ваша кнопка будет выглядеть примерно так:

 <Button
  android:id="@+id/buttonId"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

Теперь в вашем событии щелчка вы можете использовать параметр положения, чтобы узнать, какой элемент списка получает щелчок, например, по адресу:

  var btn = view.FindViewById<Button>(Resource.Id.buttonId);
  btn.Clicked+= (s,e)=>
  {
    if(position==someValue)
    {//Code}
    else
    {//Code}
  };
0 голосов
/ 02 апреля 2019

В вашем 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
}
0 голосов
/ 02 апреля 2019

Вы можете написать этот код в методе 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;

            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...