如何在具有用于滑动的 ItemTouchHelper 的 RecyclerView 中使 TextView 可滚动?

Posted

技术标签:

【中文标题】如何在具有用于滑动的 ItemTouchHelper 的 RecyclerView 中使 TextView 可滚动?【英文标题】:How to make a TextView scrollable within a RecyclerView that has an ItemTouchHelper for swiping? 【发布时间】:2021-12-02 09:40:59 【问题描述】:

这是我的应用程序的屏幕截图。

圆圈区域是带有 TouchHelper 的 RecyclerView,因此您可以向左滑动以删除列表中的项目。

回收器列表中的每一项都是一个CardView,其中包含一个线性布局,文本是一个简单的TextView。

我希望能够滚动每个 TextView 中的文本,并且能够滑动删除,但只有滑动删除才有效。

我需要做些什么来启用这些 TextView 的滚动,这些 TextView 的文本多于 4 行?

这里是一些相关的代码和布局。

    // Initialize comment list adapter
    commentAdapter = CommentListAdapter(this)
    binding.comments.adapter = commentAdapter
    binding.comments.layoutManager = LinearLayoutManager(this)
    binding.comments.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))
    val itemTouchHelper = ItemTouchHelper(SwipeToDeleteCallback(commentAdapter, (ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT)))
    itemTouchHelper.attachToRecyclerView(binding.comments)

这是每个“评论”TextView 的 XML。请注意我是如何设置垂直滚动条的,正如大多数 Internet 所推荐的那样。而且我将行数限制为 4 行,以使每个单独的项目更小。

我将 TextView 中的行数限制为 4 可能不是系统所期望的,因为通常整个文本将显示在每个 RecyclerView 项目中。如果我删除 maxLines 限制,它确实可以这样工作。

<TextView
    android:id="@+id/comment_text"
    android:layout_
    android:layout_
    android:scrollbars="vertical"
    android:maxLines="4"
    android:text="@string/comment_text" />

【问题讨论】:

【参考方案1】:

TextView 包裹在ScrollView

<ScrollView 
android:layout_
android:layout_
android:fillViewport="true">

<LinearLayout
android:layout_
android:layout_
android:orientation="vertical">

<TextView
android:id="@+id/comment_text"
android:layout_
android:layout_
android:scrollbars="vertical"
android:maxLines="4"
android:text="@string/comment_text" />

</LinearLayout>

</ScrollView>

【讨论】:

我是根据其他堆栈溢出问题这样做的,但效果为零。我的***布局元素也是 CardView 而不是 ScrollView。这是针对列表中的单个项目,而不是整个活动页面。 在这个例子中,LinearLayout 的意义何在?

以上是关于如何在具有用于滑动的 ItemTouchHelper 的 RecyclerView 中使 TextView 可滚动?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 制作一个具有酷炫液体滑动效果的酷炫入门页面

如何使用 ItemTouchHelper 及其 Callback 或实现自定义的?

如何单击以在多个实例中相互独立地滑动打开的 div?

用于问答的 BERT 中长文本的滑动窗口

如何检查滑动是不是在堆栈视图的范围内

通过滑动手指按下按钮(用于钢琴效果)