Child RecyclerView не выполняет внутреннюю прокрутку - PullRequest
0 голосов
/ 09 июля 2019

Я новичок в разработке приложений для Android.Ну, я играю с RecyclerView.У меня есть родительский просмотрщик с модальным макетом.Теперь модальный макет имеет обзор переработчика (дочерний просмотр переработчика).Мне удалось создать адаптеры и прокрутить список основных переработчиков.К сожалению, я не нахожу способ прокручивать детское изображение рециркулятора.Вот код, который я разыгрываю:

  1. Я уже пытался установить адаптер дочернего утилита-ретранслятора в методе onBindViewHolder родительского адаптера утилита-просмотрщика.

  2. Кроме того, я попытался установить атрибуты nestedScrollingEnabled = true, lowerndantFocusability = blockDescendants и focusableInTouchMode = true для дочернего recyclerView.

Вот мой 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>

В 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()
        }
    }

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)
}

Внутренний просмотрщик не прокручивает, а родительский просмотрщик нормально прокручивается.Я пытаюсь найти способ прокрутки внутреннего просмотра переработчика вместе с родительским просмотром (хочу, чтобы оба просмотра переработчика прокручивались).

1 Ответ

0 голосов
/ 10 июля 2019

Хорошо, я исправил это, установив DisallowInterceptTouchEvent .

Вот код ниже, который это исправил:

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)

Я добавил этот код в onBindViewHolder () родительского адаптера RecyclerView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...