簡體   English   中英

子 RecyclerView 不在內部滾動

[英]Child RecyclerView doesn't scroll internally

我對 Android 應用程序開發有點陌生。 好吧,我正在玩 RecyclerView。 我有一個帶有模態布局的父回收站視圖。 現在模態布局有一個recyclerview(子recyclerview)。 我設法創建了適配器並滾動了主 recyclerview 的列表。 不幸的是,我沒有找到滾動子回收器視圖的方法。 這是我正在玩的代碼:

  1. 我已經嘗試在父 recyclerview 適配器的 onBindViewHolder 方法中設置子 recyclerview 的適配器。

  2. 此外,我嘗試為 child 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>

父回收視圖模型(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>

子回收器視圖模型(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>

在主活動中:

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()中添加了這段代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM