为什么我的ListView ItemClick事件没有被触发?

时间:2016-09-16 14:08:44

标签: xamarin.android

为什么我的ItemClick事件没有触发?

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

注:

     
      
  1. 列出了列表视图。
  2.   
  3. 项目获得焦点。
  4.   

但是,我无法触发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" />

以下是我的ListItem的布局:

<?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>

2 个答案:

答案 0 :(得分:1)

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

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

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
    print("MessgaeID : \(userInfo["gcm_message_id"]!)")
    print(userInfo)
}

我使用了与您发布的完全相同的布局。 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; 处理程序始终如一。

答案 1 :(得分:0)

有一个错误,当代码没有包裹在大括号之间时,不会触发断点:

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

要观察断点,我必须格式化代码如下:

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