为什么我的ItemClick事件没有触发?
_specialtyListView.ItemClick += (s, e) => _viewModel.Specialty = (string)_specialtyListView.Adapter.GetItem((int)e.Id);
注:
- 列出了列表视图。
- 项目获得焦点。
醇>
但是,我无法触发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>
答案 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();
};