【问题标题】:ItemTouchHelper scroll doesn't work in recyclerView that is nested in a horizontal Scroll viewItemTouchHelper 滚动在嵌套在水平滚动视图中的 recyclerView 中不起作用
【发布时间】:2019-05-17 11:29:54
【问题描述】:

我在自己的片段中的 LinearLayout 中有一个水平 recyclerView。片段的占位符被包裹在一个水平滚动视图中。当我添加片段时,recyclerview nestedScroll 设置为 false,Horizo​​ntalScrollView 控制滚动。

但是,我现在已经在 recyclerview 上实现了 ItemTouchHelper.Callback 以便能够对单元格重新排序。但是,当我将一个单元格移出屏幕时,它不会随之滚动。我尝试更改nestedScroll 和fixedSize 但没有任何效果。

我不能使用 NestedScrollView,因为 recyclerView 是水平正确的?

任何建议

主xml

        <HorizontalScrollView
            android:id="@+id/timeline_horizontal_scroll_view"
            style="@style/timeline_horizontal_scroll_view_style">

            <FrameLayout
                android:id="@+id/media_scrub_placeholder"
                style="@style/media_scrub_placeholder_style" />
        </HorizontalScrollView>

片段 xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/timeline_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>

【问题讨论】:

    标签: android android-layout user-interface kotlin androidx


    【解决方案1】:

    我能够在我的片段中使用它来解决这个问题

    reorderTimelineRecyclerView.layoutManager = LinearLayoutManager(context!!, LinearLayoutManager.HORIZONTAL, false)
    reorderTimelineRecyclerView.isNestedScrollingEnabled = true
    broadcastScrollState(true, context!!)
    val callback = SimpleItemTouchHelperCallback(adapter, context!!, listOfLocalAssets.size)
    val touchHelper = ItemTouchHelper(callback)
    touchHelper.attachToRecyclerView(reorderTimelineRecyclerView)
    

    broadcastScrollState 更新回收器视图的滚动以在处于重新排序状态时启用,并在之后将其关闭。因此,当用户长按时,它使用 rcecyclerview 的滚动,但当不长按时,它使用水平滚动视图的滚动。希望这对某人有帮助!

    编辑

    fun broadcastScrollState(scrollState: Boolean, context: Context) {
        val intent = Intent("scroll-state-event")
        intent.putExtra("scroll-state", scrollState)
        LocalBroadcastManager.getInstance(context!!).sendBroadcast(intent)
    }
    

    然后在我的带有 recycerlview 的片段中,我观察互联网并切换我的滚动视图的滚动状态

    private val scrollReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            updateScrollState(intent!!.getBooleanExtra("scroll-state", false))
        }
    }
    
    private fun updateScrollState(scrollState: Boolean) {
        timeline_horizontal_scroll_view.isEnabled = !scrollState
    }
    

    【讨论】:

    • 你能分享一下你的 broadcastScrollState() 方法吗?
    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2014-07-13
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多