2016-09-16 77 views
0

为什么我的ItemClick事件不会触发?为什么我的ListView ItemClick事件不被触发?

_specialtyListView.ItemClick += (s, e) => _viewModel.Specialty = (string)_specialtyListView.Adapter.GetItem((int)e.Id); 

注:

  1. ListView的填充。
  2. 项目获得焦点。

但是,我只是无法得到itemclick事件触发。

我有我的ListView以下初始化代码:

_specialtyListView = FindViewById<ListView>(Resource.Id.SpecialtyListView); 
_specialtyListView.ChoiceMode = ChoiceMode.Single; 
_viewModel.LoadSpecialties(); 
_specialtyListView.Adapter = new SpecialtiesAdapter(this, new List<string>(_viewModel.Specialties)); 
_specialtyListView.ItemClick += (s, e) => _viewModel.Specialty = (string)_specialtyListView.Adapter.GetItem((int)e.Id); 

然后我有以下ListViewItem的布局:

<ListView 
     android:id="@+id/SpecialtyListView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="10dp" 
     android:layout_marginTop="5dp" 
     android:background="@android:color/transparent" 
     android:cacheColorHint="@android:color/transparent" 
     android:divider="#CCCCCC" 
     android:dividerHeight="1dp" 
     android:paddingLeft="2dp" /> 

这里的布局我的列表项:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:id="@+id/ProviderSpecialty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="14sp" /> 
</LinearLayout> 

回答

1

我建议你切换到RecyclerView,因为它有更好的内存处理;您可以对单个项目进行更新,而不是强制全部更新它们。

无论如何,我无法在本地重现您的问题。我做了以下操作:

var listView = FindViewById<ListView>(Resource.Id.listview); 
listView.ChoiceMode = ChoiceMode.Single; 
listView.ItemClick += (s, e) => 
{ 
    System.Diagnostics.Debug.WriteLine($"Clicked {e.Position}"); 
}; 

var items = new string[] { "Havarti", "Brie", "Cheddar", "Muenster", "Swiss" }; 
var adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, items); 
listView.Adapter = adapter; 

我使用了与您张贴的完全相同的布局。 ItemClick处理程序一致命中。

+0

ArrayAdapter适用于我所需要的。仍然不知道为什么我的自定义适配器不工作... –

+0

如果您可以发布您的自定义适配器,我可以帮助您调试。 – Cheesebaron

+0

请查看我的更新以了解我的决议。 –

0

还有的地方时,代码是不是包裹在大括号之间的断点不会被触发了一个错误:

listview.ItemClick += (s, e) => selectedItem = listview.GetItemAtPosition(e.Position).ToString(); 

观察断点,我不得不格式化代码如下:

listview.ItemClick += (s, e) => 
    { 
     selectedItem = listview.GetItemAtPosition(e.Position).ToString(); 
    }; 
+0

这不是一个错误。在这种情况下,您的断点是为事件处理程序的赋值设置的,而不是事件处理程序的主体。 – Cheesebaron

+0

在Visual Studio中,您可以在处理程序本身可以接收断点的地方设置断点。因此,整条线不会突出显示棕色。处理程序代码突出显示为棕色。这不是一个错误? –

相关问题