gpt4 book ai didi

c# - ListView Cell Translation 操作会影响其他单元格

转载 作者:太空狗 更新时间:2023-10-29 23:49:10 31 4
gpt4 key购买 nike

我正在开发自定义 SwipeListView,它允许向左或向右滑动单元格,目前仅适用于 Android。这工作得很好,但由于某些原因,更改 Cell 的 ContentViewTranslationX 会影响 ListView 中的其他单元格。每第 8 个单元格也更改它的 TranslationX(至少在视觉上):

Swipe Bug

这是导致此行为的代码行:

mainContent.TranslationX = quota * Width + mainContentPositionX;

我已经尝试了一些可能的解决方案,但都没有奏效:

  • ListView(RetainElement、RecycleElement、RecycleElementAndDataTemplate)尝试每一种不同的CachingStrategy
  • 在主线程上运行代码
  • 在操作 TranslationX 之后,遍历我的 ListView 中的所有其他单元格并将它们的 TranslationX 设置为 0

我确定问题是单元格被重用,这就是它应用 TranslationX 操作的原因,但如果是这样,那么我很困惑为什么要使用 CachingStrategy=RetainElement 没有解决问题。

我也将感谢有助于调试此问题的想法。


编辑

我为 iOS 实现了 SwipeListView 功能,它没有任何问题。好像是安卓的问题。


编辑 - Github 存储库

我添加了一个示例 Github 存储库:https://github.com/Zure1/SwipeListView-Sample

编辑

我现在可以确认这只是 Android 中的一个问题。 iOS 运行良好。

最佳答案

您的分析是正确的,问题出在元素回收上。当您以编程方式更改翻译时,框架不知道您的更改并且您希望它被还原,因此它保持翻译不变。所有缓存策略都涉及项目回收,包括 RetainElement。回收最好保持启用状态,因为它可以带来巨大的性能提升。

您的问题的一个可能解决方案是使用数据绑定(bind)来设置 TranslationX 属性并在您的 ViewModel 上设置绑定(bind)属性。这样,每当控件被回收并绑定(bind)到新的 ViewModel 时,值就会重置。您可以在 ViewModel 上引入一个整数属性并将其绑定(bind)到 TranslationX 或者更简洁的方法是引入一个 bool 属性,如 IsSwipped 并在其上创建一个数据触发器以根据需要设置翻译。

关于c# - ListView Cell Translation 操作会影响其他单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53203857/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com