【发布时间】: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
标签: c# xamarin xamarin.forms