Java实现拖拽列表项的排序功能

  

在一些允许用户自定义栏目顺序的应用(如:凤凰新闻,网易云音乐等),我们可以方便地拖拽列表项来完成列表的重新排的序,进而完成对栏目顺序的重排。这个功能很人性化,而实现起来其实很简单(甚至都不用写什么后台代码),只有三步。

  

  

首先,我们需要让冰箱的大门敞开,也就是允许我们进行拖拽的相关操作。以列表视图为例,注意下面几个属性。

        & lt; StackPanel>   & lt; ListView x: Name=傲斜怼?   AllowDrop=" True "   CanReorderItems=" True "   IsSwipeEnabled=" True "比;   & lt; ListView.ItemContainerStyle>   & lt;风格TargetType=癓istViewItem”比;   & lt; Setter属性="背景" Value=" https://www.yisu.com/zixun/Gray "/比;   & lt; Setter属性="前景" Value=" https://www.yisu.com/zixun/White "/比;   & lt; Setter属性="边缘" Value=" https://www.yisu.com/zixun/4 "/比;   & lt;/Style>   & lt;/ListView.ItemContainerStyle>   & lt;/ListView>   & lt;按钮单击=" Button_Click "祝辞显示Items   & lt; TextBlock x: Name="三"/比;   & lt;/StackPanel>      

AllowDrop属性允许元素进行拖动,它继承自UIElement基类,为所有可视元素支持。

  

CanReorderItems属性继承自ListViewBase基类,允许列表控件的项可以重新排序。

  

IsSwipeEnabled属性(刷卡有“轻扫”之意)也需要设置为“True”,否则在触摸屏等输入设备下无法进行操作。相关的详尽说明在MSDN文档里有介绍(https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.ListViewBase),此部分摘录部分原文:

  

的评论   IsSwipeEnabled

设置为false禁用一些默认的触摸交互,所以它应该设置为true,当这些交互是必要的。例如:

  

如果启用了项目选择和设置IsSwipeEnabled为false,用户可以用鼠标单击右键取消项目,但不能取消一个项目通过使用滑动手势与联系。
  如果你将CanDragItems设置为true,并且IsSwipeEnabled为false,用户可以用鼠标拖动物品,但不与联系。
  如果你将CanReorderItems设置为true,并且IsSwipeEnabled为false,用户可以用鼠标再订购物品,但不与联系。
  你通常设置IsSwipeEnabled为false时禁用点击动画视图中的项目不支持使用滑动手势的交互,如取消勾选,拖动和重新排序。禁用动画不需要的时候可以改善应用程序的性能。

  

(有趣的是最后一段:当列表不允许轻扫手势(撤销选定,拖动,拖拽重排)时,我们可以“显式”地将IsSwipeEnabled属性设置为False来提升应用的性能。)

  

  

前台好了后,我们就可以在后台加点东西,把我们的排序逻辑(其实并没有,微软已经写好了)添加进去。这个演示里,我用了一个按钮和一个文本框来观察重排的结果。如下:

        公共类密封部分主页:页面   {   公共主页()   {   this.InitializeComponent ();   for (int i=0;我& lt;10;我+ +)   {   list.Items。添加($”- - - - - -这是项{我}- - - - - -”);   }   }   私人空间Button_Click(对象发送方,RoutedEventArgs e)   {   三种。文本=string.Empty;   foreach (var list.Items项)   {   三种。文本+=item.ToString () [18] + ";   }   }   }      

这样,重新排序后,点击按钮,我们即可观察到结果了。

  

  

把大象(?)装进去之后,最后就是我们的收尾工作了。显然,刚才的列表只是一个中间的载体,是我们待排序栏目的简单显示。一般而言,这个列表视图会安置在contentdialog或是弹出里,那么怎么在重排后立即让父页面上的栏目得到相应,进行重排呢?我们用个预定义的委托即可,加在刚才的后台代码里(冰箱能装的东西其实挺多的)。

        公共行动行动;      

然后在父页面注册方法,比如:,,,,,,,,,,,

        btn。单击+=异步(s、e)=比;   {   var=new对话框Dialogs.Sort ();   对话框。行动+=异步()=比;{等待sortagain ();};   等待dialog.ShowAsync ();   };      

以上所述是小编给大家介绍的Java实现拖拽列表项的排序功能,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

Java实现拖拽列表项的排序功能