ListView 单元格翻译操作会影响其他单元格

Posted

技术标签:

【中文标题】ListView 单元格翻译操作会影响其他单元格【英文标题】:ListView Cell Translation manipulation affects other cells 【发布时间】:2019-04-11 17:34:39 【问题描述】:

我正在开发一个自定义的SwipeListView,它允许向左或向右滑动单元格,目前仅适用于 android。这工作得很好,但由于某种原因,更改单元格的ContentViewTranslationX 会影响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 个单元格,而不仅仅是目标单元格

ListView的重用

UITableViewCell 可重用性问题。修改一个单元格正在影响其他单元格

WPF如何获得ListView内各单元格控件