为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

您从Xamarin.Forms.ListView.SelectedItemListView的属性中获取所选项目。如果您的 ListView.ItemSource 是允许使用 IndexOf 的类型,您现在可以执行类似的操作


int position = (yourlistview.ItemSource as ObservableCollection<your type>).IndexOf(yourlistview.SelectedItem)

更新:


好的,我想我明白你想要什么。在大多数情况下,当前使用列表视图时会显示多个项目。所以他们不存在一个单一的索引,但我想你只是想知道列表的最后一项是否可见/用户是否已经滚动到最后?


如果是这样,ListView 有一个 ItemAppearing 事件。例如,如果用户滚动浏览前 100 个项目,我会使用它从网络源加载更多数据。你可以做这样的事情


         listview.ItemAppearing += listviewItemAppearing;

         listview.ItemDisappearing += listviewItemDisappearing;


         bool m_scrolledToEnd;


        private void listviewItemDisappearing(object sender, ItemVisibilityEventArgs e)

        {

            if(e.Item == yourlastiem) 

              m_scrolledToEnd = false;

        }


        private void listviewItemAppearing(object sender, ItemVisibilityEventArgs e)

        {

            if(e.Item == yourlastiem) 

              m_scrolledToEnd = true;

        }

如果您真的需要知道是否显示了特定索引,您可以创建一个List<int> m_idxlist; 并在出现的事件中将项目的索引添加到列表中,并在消失的事件中从列表中删除项目的索引。然后您将拥有一个列表,其中存储了当前显示的项目的所有索引。


查看完整回答
反对 回复 2021-10-09
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

从文档


ListView 支持一次选择一项。选择默认开启。当用户点击一个项目时,会触发两个事件:ItemTapped 和 ItemSelected。请注意,点击同一项目两次不会触发多个 ItemSelected 事件,但会触发多个 ItemTapped 事件。另请注意,如果取消选择项目,将调用 ItemSelected。


要检测选择一个项目,您可以添加一个方法,onSelection:


void OnSelection (object sender, SelectedItemChangedEventArgs e)

{

  if (e.SelectedItem == null) {

    return; //ItemSelected is called on deselection, which results in SelectedItem being set to null

  }

  DisplayAlert ("Item Selected", e.SelectedItem.ToString (), "Ok");

  //((ListView)sender).SelectedItem = null; //uncomment line if you want to disable the visual selection state.

}

要禁用选择,只需将 selectedItem 设置为 null:


SelectionDemoList.ItemSelected += (sender, e) => {

    ((ListView)sender).SelectedItem = null;

};


查看完整回答
反对 回复 2021-10-09
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信