【问题标题】:Button Click Inside ListView in Monoandriod在 Monoandriod 中的 ListView 内单击按钮
【发布时间】:2025-11-30 08:40:01
【问题描述】:

我使用的是单声道安卓 ListView,我的列表视图包含 2 个文本视图和一个图像

我的以下代码有效

  listView.ItemClick += (sender, e) =>
    {
        //Get our item from the list adapter
        var item = this.listAdapter.GetItemAtPosition(e.Position);

        //Make a toast with the item name just to show it was clicked
        Toast.MakeText(this, item.Name + " Clicked!", ToastLength.Short).Show();
    };

但是当我在 Listview 中放置一个按钮时,此事件不起作用,我无法处理按钮单击。所以我如何在 Mono andriod 中处理 Listview 中的按钮单击

【问题讨论】:

  • 似乎this 将是您问题的答案。

标签: c# visual-studio-2010 xamarin.android


【解决方案1】:

如果您希望在列表视图内的按钮上专门设置点击处理程序,您需要这样的东西:

public class CustomListAdapter: BaseAdapter {
    public CustomListAdapter(Context context, EventHandler buttonClickHandler) {
        _context = context;
        _buttonClickHandler = buttonClickHandler;
    }

    public View GetView(int position, View convertView, View parent) {
        var itemView = convertView;

        if(itemView == null) {
            var layoutInflater = (LayoutInflater)_context.GetSystemService(Context.LayoutInflaterService);
            itemView = layoutInflater(Resource.Layout.ItemView);
        }

        var button = itemView.FindViewById<Button>(Resource.Id.MyButton);
        button.Click += _buttonClickHandler;
    }

    // ... Rest of the code omitted for simplicity.
}

此代码没有考虑到按钮可能附加了另一个处理程序。在耦合新的之前,请确保将旧的解耦。或者添加某种您之前添加过点击处理程序的检测,不要添加另一个。

【讨论】:

  • 我们如何在将列表视图适配器与CustomListAdapter绑定时传递buttonClickHandler
  • 假设你正在使用一个列表活动,你会像这样传递它: this.Adapter = new CustomListAdapter(this,this.OnButtonClick);您基本上将其指向方法名称。