C# 膨胀自定义行视图覆盖列表视图单击事件?

C# 膨胀自定义行视图覆盖列表视图单击事件?,c#,xamarin,xamarin.android,C#,Xamarin,Xamarin.android,将自定义行视图膨胀到绑定到列表视图的列表适配器后,我遇到了一个问题。我有一个ItemClick事件注册在我的ListView项目上,当它被单击时,我希望DetailView会被打开。但是,当我单击列表视图项时,似乎没有发生任何事情,因此我的单击事件被覆盖 下面是使用列表视图的ExplorerActivity类的示例: protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedI

将自定义
行视图
膨胀到绑定到
列表视图
列表适配器
后,我遇到了一个问题。我有一个
ItemClick
事件注册在我的
ListView
项目上,当它被单击时,我希望
DetailView
会被打开。但是,当我单击
列表视图
项时,似乎没有发生任何事情,因此我的单击事件被覆盖

下面是使用
列表视图的
ExplorerActivity
类的示例:

protected override void OnCreate(Bundle savedInstanceState)
{
        base.OnCreate(savedInstanceState);

        SetContentView(Resource.Layout.ExplorerView);

        exampleListView = FindViewById<ListView>(Resource.Id.exampleListView);

        string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
                                 "TestDb.db3");

        SQLiteConnection myConn = new SQLiteConnection(dbPath);                

        allItems = dbHelper.GetAllItems();

        exampleListView.Adapter = new exampleListAdapter(this, allItems);

        exampleListView.ItemClick += exampleListView_ItemClick;
}
如果我对自定义
行视图
进行充气,是否会丢失在
列表视图
项上注册的单击事件?我无法将事件添加到
ListAdapter
中的整个自定义
RowView
,因此我假设它将是一个
ListView.ItemClick
事件

自定义
行视图
是否忽略了
列表视图
上的我的单击事件?
行视图
的每个实例仍然是一个
列表视图
项,对吗

我似乎找不到合适的对象,例如,
RowView
不是一件事,那么在对自定义
RowView
进行膨胀后,如何将事件绑定到
ListView

我曾尝试在explorer活动中设置断点,但从未命中,这就是为什么我认为该事件不再在
列表视图\u ItemClick
上注册的原因

如果对自定义行视图进行充气,是否会丢失已在ListView项上注册的单击事件

不,您不会丢失
ListView
的项目单击事件。应正确触发项目单击事件

自定义行视图是否忽略ListView上的单击事件?RowView的每个实例仍然是ListView项,对吗

我做了一个测试的基本演示,项目点击事件可以正确触发。你可以试试我的演示

我似乎找不到合适的对象,例如,RowView不是一个东西,那么在膨胀自定义RowView后如何将事件绑定到ListView项

一种方法是绑定
ListView
的项目单击事件。另一种方法是将单击事件绑定到膨胀视图:

public override View GetView(int position, View convertView, ViewGroup parent)
{
    var item = mList[position];

    if (convertView == null)
    {
        convertView = mContext.LayoutInflater.Inflate(Resource.Layout.CustomRowView,null);
    }
    var btn = convertView.FindViewById<Button>(Resource.Id.mBtn);
    btn.Click += Btn_Click;
    return convertView;
}

private void Btn_Click(object sender, EventArgs e)
{
    //do your job here
}

今天晚上,我将浏览您的示例,并回答任何问题。非常感谢。我下载了你的演示并浏览了代码。你的代码按照我的预期工作,我的代码则不然。未注册任何单击事件。这是我的项目:如果你能看看我的项目,让我知道我做错了什么,我会非常感激。我添加到行视图的所有其他控件(如图像、文本视图、按钮等)是否可能导致无法实际单击行?这个理论的问题是我可以点击你例子中的文本,但它仍然有效。你需要将按钮设置为不可聚焦,请在答案中查看我的更新。
public override View GetView(int position, View convertView, ViewGroup parent)
{
    var item = mList[position];

    if (convertView == null)
    {
        convertView = mContext.LayoutInflater.Inflate(Resource.Layout.CustomRowView,null);
    }
    var btn = convertView.FindViewById<Button>(Resource.Id.mBtn);
    btn.Click += Btn_Click;
    return convertView;
}

private void Btn_Click(object sender, EventArgs e)
{
    //do your job here
}
<Button
    android:id="@+id/btnClick"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:text="Click Me"/>