Xamarin ListView选中项时Dictionary与KeyValuePair空引用异常问题
解决Xamarin ListView选中项时的NullReferenceException问题
嘿,作为Xamarin和C#新手碰到这个空引用异常真的很常见,我来帮你捋清楚问题出在哪,以及怎么解决~
这个System.NullReferenceException基本上是因为args.Item为null导致的。在Xamarin的ItemTapped事件里有个小细节:当你再次点击已经选中的项时,系统会触发取消选中的操作,这时候args.Item就会变成null,你直接强制转换自然就报错了。
第一步:先加个null检查(最关键)
修改你的选中项事件代码,先判断args.Item是不是不为null,再进行转换操作:
public async void OnSelectedFriendDescript(object obj, ItemTappedEventArgs args) { // 先把null的情况挡在外边 if (args.Item == null) return; var selectedFriend = (KeyValuePair<string, string>)args.Item; // 现在就能安全获取Key和Value啦 string friendId = selectedFriend.Key; string friendName = selectedFriend.Value; // 接下来就可以用这些值做你想做的事啦 }
额外小技巧:避免重复触发(可选)
如果你不想让用户重复点击同一个项时触发事件,可以在处理完逻辑后手动取消ListView的选中状态,这样下次点击同一个项就会正常触发,也不会出现null的情况:
public async void OnSelectedFriendDescript(object obj, ItemTappedEventArgs args) { if (args.Item == null) return; var selectedFriend = (KeyValuePair<string, string>)args.Item; string friendId = selectedFriend.Key; string friendName = selectedFriend.Value; // 取消选中状态,防止重复点击触发null场景 ((ListView)obj).SelectedItem = null; }
最后再确认下数据源
另外你可以顺便确认下usermanager.GetUserList(keyword)返回的Dictionary<string, string>是不是真的有数据,如果返回空集合或者null的话,ListView空区域被点击也可能触发事件导致args.Item为null,不过前面加的null检查已经能覆盖这种情况啦。
这样修改之后,应该就能顺利获取选中项的Key和Value,再也不会报空引用异常啦~
内容的提问来源于stack exchange,提问作者Leaf Leafword
相关产品推荐
相关产品推荐

