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"/>