猿问

用户在 listview xamarin 表单中关注哪个项目

我是一名学习 xamarin 表单的学生,我正在尝试创建一个基本的聊天应用程序,我想知道如何在用户正在观看的列表视图中获取当前项目的位置。当收到一条新消息时,我想知道用户是否在底部,如果底部聚焦新消息,如果不在底部,则只需通过向其添加焦点来添加不。


catspeake
浏览 235回答 2
2回答

慕神8447489

您从Xamarin.Forms.ListView.SelectedItemListView的属性中获取所选项目。如果您的 ListView.ItemSource 是允许使用 IndexOf 的类型,您现在可以执行类似的操作int position = (yourlistview.ItemSource as ObservableCollection<your type>).IndexOf(yourlistview.SelectedItem)更新:好的,我想我明白你想要什么。在大多数情况下,当前使用列表视图时会显示多个项目。所以他们不存在一个单一的索引,但我想你只是想知道列表的最后一项是否可见/用户是否已经滚动到最后?如果是这样,ListView 有一个 ItemAppearing 事件。例如,如果用户滚动浏览前 100 个项目,我会使用它从网络源加载更多数据。你可以做这样的事情&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;listview.ItemAppearing += listviewItemAppearing;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;listview.ItemDisappearing += listviewItemDisappearing;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bool m_scrolledToEnd;&nbsp; &nbsp; &nbsp; &nbsp; private void listviewItemDisappearing(object sender, ItemVisibilityEventArgs e)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(e.Item == yourlastiem)&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_scrolledToEnd = false;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; private void listviewItemAppearing(object sender, ItemVisibilityEventArgs e)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(e.Item == yourlastiem)&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_scrolledToEnd = true;&nbsp; &nbsp; &nbsp; &nbsp; }如果您真的需要知道是否显示了特定索引,您可以创建一个List<int> m_idxlist; 并在出现的事件中将项目的索引添加到列表中,并在消失的事件中从列表中删除项目的索引。然后您将拥有一个列表,其中存储了当前显示的项目的所有索引。

慕尼黑的夜晚无繁华

从文档ListView 支持一次选择一项。选择默认开启。当用户点击一个项目时,会触发两个事件:ItemTapped 和 ItemSelected。请注意,点击同一项目两次不会触发多个 ItemSelected 事件,但会触发多个 ItemTapped 事件。另请注意,如果取消选择项目,将调用 ItemSelected。要检测选择一个项目,您可以添加一个方法,onSelection:void OnSelection (object sender, SelectedItemChangedEventArgs e){&nbsp; if (e.SelectedItem == null) {&nbsp; &nbsp; return; //ItemSelected is called on deselection, which results in SelectedItem being set to null&nbsp; }&nbsp; DisplayAlert ("Item Selected", e.SelectedItem.ToString (), "Ok");&nbsp; //((ListView)sender).SelectedItem = null; //uncomment line if you want to disable the visual selection state.}要禁用选择,只需将 selectedItem 设置为 null:SelectionDemoList.ItemSelected += (sender, e) => {&nbsp; &nbsp; ((ListView)sender).SelectedItem = null;};
随时随地看视频慕课网APP
我要回答