Java实现拖拽列表项的排序功能
在一些允许用户自定义栏目顺序的app(如:凤凰新闻、网易云音乐等),我们可以方便地拖拽列表项来完成列表的重新排序,进而完成对栏目顺序的重排。这个功能很人性化,而实现起来其实很简单(甚至都不用写什么后台代码),只有三步。
①把冰箱门打开
首先,我们需要让冰箱的大门敞开,也就是允许我们进行拖拽的相关操作。以ListView为例,注意下面几个属性。
<StackPanel> <ListViewx:Name="list" AllowDrop="True" CanReorderItems="True" IsSwipeEnabled="True"> <ListView.ItemContainerStyle> <StyleTargetType="ListViewItem"> <SetterProperty="Background"Value="Gray"/> <SetterProperty="Foreground"Value="White"/> <SetterProperty="Margin"Value="4"/> </Style> </ListView.ItemContainerStyle> </ListView> <ButtonClick="Button_Click">ShowItems</Button> <TextBlockx:Name="txt"/> </StackPanel>
AllowDrop属性允许元素进行拖动,它继承自UIElement基类,为所有可视元素支持。
CanReorderItems属性继承自ListViewBase基类,允许列表控件的项可以重新排序。
IsSwipeEnabled属性(swipe有“轻扫”之意)也需要设置为“True”,否则在触摸屏等输入设备下无法进行操作。相关的详尽说明在MSDN文档里有介绍(https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.ListViewBase),此部分摘录部分原文:
Remarks
SettingIsSwipeEnabledtofalsedisablessomedefaulttouchinteractions,soitshouldbesettotruewhentheseinteractionsareneeded.Forexample:
IfitemselectionisenabledandyousetIsSwipeEnabledtofalse,ausercandeselectitemsbyright-clickingwiththemouse,butcan'tdeselectanitemwithtouchbyusingaswipegesture.
IfyousetCanDragItemstotrueandIsSwipeEnabledtofalse,ausercandragitemswiththemouse,butnotwithtouch.
IfyousetCanReorderItemstotrueandIsSwipeEnabledtofalse,ausercanreorderitemswiththemouse,butnotwithtouch.
YoutypicallysetIsSwipeEnabledtofalsetodisableswipeanimationswhenitemsintheviewdon'tsupportinteractionsthatusetheswipegesture,likedeselecting,dragging,andreordering.Disablingtheanimationwhenit'snotneededcanimprovetheperformanceofyourapp.
(有趣的是最后一段:当列表不允许轻扫手势(撤销选定,拖动,拖拽重排)时,我们可以“显式”地将IsSwipeEnabled属性设置为False来提升应用的性能。)
②把大象装进去
前台ok后,我们就可以在后台加点东西,把我们的排序逻辑(其实并没有,微软已经写好了)添加进去。这个demo里,我用了一个按钮和一个文本框来观察重排的结果。如下:
publicsealedpartialclassMainPage:Page { publicMainPage() { this.InitializeComponent(); for(inti=0;i<10;i++) { list.Items.Add($"-----THISISITEM{i}-----"); } } privatevoidButton_Click(objectsender,RoutedEventArgse) { txt.Text=string.Empty; foreach(variteminlist.Items) { txt.Text+=item.ToString()[18]+""; } } }
这样,重新排序后,点击按钮,我们即可观察到结果了。
③把冰箱门关上
把大象(?)装进去之后,最后就是我们的收尾工作了。显然,刚才的列表只是一个中间的载体,是我们待排序栏目的简单显示。一般而言,这个listview会安置在contentdialog或是popup里,那么怎么在重排后立即让父页面上的栏目得到相应,进行重排呢?我们用个预定义的委托即可,加在刚才的后台代码里(冰箱能装的东西其实挺多的)。
publicActionaction;
然后在父页面注册方法,比如:
btn.Click+=async(s,e)=> { vardialog=newDialogs.Sort(); dialog.action+=async()=>{awaitsortagain();}; awaitdialog.ShowAsync(); };
以上所述是小编给大家介绍的Java实现拖拽列表项的排序功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!