gpt4 book ai didi

java - 子 RecyclerView 不会在内部滚动

转载 作者:行者123 更新时间:2023-12-02 03:17:07 24 4
gpt4 key购买 nike

我对 Android 应用程序开发有点陌生。好吧,我正在玩 RecyclerView。我有一个具有模式布局的父回收器 View 。现在模态布局有一个recyclerview(子recyclerview)。我已成功创建适配器并滚动主回收器 View 列表。不幸的是,我找不到滚动子回收器 View 的方法。这是我正在使用的代码:

  1. 我已经尝试在父recyclerview适配器的onBindViewHolder方法中设置子recyclerview的适配器。

  2. 此外,我尝试为子 recyclerView 设置属性nestedScrollingEnabled=true、descendantFocusability=blocksDescendants 和 focusableInTouchMode=true。

这是我的activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

父recyclerview模型(model.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Testing" />

<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:background="@android:color/darker_gray"
android:layout_marginVertical="8dp"/>

<android.support.v7.widget.RecyclerView
android:id="@+id/modalRecyclerView"
android:layout_width="wrap_content"
android:layout_height="100dp" />
</LinearLayout>

子回收器 View 模型 (child_modal.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Testing"/>
</LinearLayout>

在MainActivity中:

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)


recyclerView.apply {
layoutManager = LinearLayoutManager(this@MainActivity, RecyclerView.VERTICAL, false)
adapter = ModalAdapter()
}
}

模态适配器:

class ModalAdapter : RecyclerView.Adapter<ModalAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context).inflate(R.layout.model, parent, false)
return ViewHolder(inflater)
}

override fun getItemCount(): Int {
return 5
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.view.modalRecyclerView.adapter = ChildModalAdapter()
holder.view.modalRecyclerView.layoutManager = LinearLayoutManager(holder.view.context, RecyclerView.VERTICAL, false)
}

class ViewHolder(val view: View): RecyclerView.ViewHolder(view)
}

ChildModalAdapter:

class ChildModalAdapter : RecyclerView.Adapter<ChildModalAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context).inflate(R.layout.child_modal, parent, false)
return ViewHolder(inflater)
}

override fun getItemCount(): Int {
return 10
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
}

class ViewHolder(val view: View): RecyclerView.ViewHolder(view)
}

内部 recyclerview 不会滚动,而父 recyclerview 可以正常滚动。我正在尝试找到一种方法使内部 recyclerview 与父 recyclerview 一起滚动(我希望两个 recyclerview 都滚动)。

最佳答案

好的,我通过设置监听器解决了这个问题。

下面是修复该问题的代码:

val mScrollChangeListener = object : RecyclerView.OnItemTouchListener {
override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {}

override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
when (e.action) {
MotionEvent.ACTION_MOVE -> {
rv.parent.requestDisallowInterceptTouchEvent(true)
}
}
return false
}

override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {}
}
modalRecyclerView.addOnItemTouchListener(mScrollChangeListener)

我已将此代码添加到父 RecyclerView 适配器的 onBindViewHolder() 中。

关于java - 子 RecyclerView 不会在内部滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56955635/

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