2016-09-16 76 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中,您可以在處理程序本身可以接收斷點的地方設置斷點。因此,整條線不會突出顯示棕色。處理程序代碼突出顯示爲棕色。這不是一個錯誤? –

相關問題