ListView 单元格翻译操作会影响其他单元格
Posted
技术标签:
【中文标题】ListView 单元格翻译操作会影响其他单元格【英文标题】:ListView Cell Translation manipulation affects other cells 【发布时间】:2019-04-11 17:34:39 【问题描述】:我正在开发一个自定义的SwipeListView
,它允许向左或向右滑动单元格,目前仅适用于 android。这工作得很好,但由于某种原因,更改单元格的ContentView
的TranslationX
会影响ListView
中的其他单元格。每 8 个单元格也会更改为 TranslationX
(至少在视觉上):
这是导致这种行为的代码行:
mainContent.TranslationX = quota * Width + mainContentPositionX;
我尝试了一些可能的解决方案,但都没有奏效:
为ListView
(RetainElement、RecycleElement、RecycleElementAndDataTemplate)尝试每个不同的CachingStrategy
在 MainThread 上运行代码
操作TranslationX
后,遍历我的ListView
中的所有其他单元格并将它们的TranslationX
设置为0
我确定问题在于单元格正在被重复使用,这就是它应用 TranslationX
操作的原因,但如果是这样,那么我很困惑为什么使用 CachingStrategy=RetainElement
不能解决问题。
我也将感谢有助于调试此问题的想法。
编辑
我为 ios 实现了SwipeListView
功能,它可以正常工作。好像是安卓的问题。
编辑 - Github 存储库
我添加了一个示例 Github 存储库:https://github.com/Zure1/SwipeListView-Sample
编辑
我现在可以确认这只是 Android 中的问题。 iOS 运行良好。
【问题讨论】:
你能发布你的适配器代码吗? @Aaron 你到底是什么意思?这是一个Xamarin
应用程序,我只包含一个页面,自定义SwipeListView
和一些适用于Android 的CustomRenderers。
绝对是重用。如果您能以某种方式连接到单元格的BindingContext
更改事件,那将是放置重置滑动的好地方。你能在 GitHub 上发布一些代码或创建一个 repo 吗?
@MartinZikmund 在我的帖子中添加了 GitHub 存储库
@DennisSchröer 从表面上看,这个库可以实现您所追求的目标,并且可以为您节省一些心痛 - github.com/AndreiMisiukevich/ContextMenu
【参考方案1】:
您的分析是正确的,问题在于物品回收。当您以编程方式更改翻译时,框架不知道您的更改并且您希望将其还原,因此它保持翻译不变。所有缓存策略都涉及项目回收,包括RetainElement
。回收最好保持启用状态,因为它可以提供很大的性能提升。
您的问题的一个可能解决方案是使用数据绑定来设置 TranslationX
属性并在您的 ViewModel 上具有绑定属性。这样,每当控件被回收并绑定到新的 ViewModel 时,值就会重置。您可以在 ViewModel 上引入整数属性并将其绑定到 TranslationX
,或者更简洁的方法是引入像 IsSwipped
这样的布尔属性并在其上创建数据触发器以根据需要设置转换。
【讨论】:
好主意,但我看到的问题是,为了滑动,我首先需要处理视图的触摸事件。所以我看不到让 ViewModel 处理这个的方法,因为它不知道我什么时候滑动。我正在使用List和Item的DispatchTouchEvent
来实现对TranslationX
的操作。
是的,您仍然会在视图中保留滑动检测任务,因为这是视图问题。我认为解决方案可能涉及创建自定义行为 (devblogs.microsoft.com/xamarin/behaviors-in-xamarin-forms) 来设置属性,并且数据绑定可以将值传输到您的 ViewModel。我建议您首先尝试上面 cmets 中 Mark 建议的组件/库,因为如果它满足您的需求,使用它会更简单。
是的,我要为 Mark 建议的那个库做出贡献。有些东西不见了,但它看起来比我的代码干净得多,此时我可以使用新的开始,因为自从我打开这个问题以来,我的 swipe 项目的代码库增长了很多!谢谢你的建议以上是关于ListView 单元格翻译操作会影响其他单元格的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableViewCell 中的按钮操作会影响其他单元格
滑动 UITableViewCell 操作会影响表格视图中的每 4 个单元格,而不仅仅是目标单元格