FragmentTranscation внутри RecyclerView.ViewHolder - PullRequest
0 голосов
/ 17 июня 2019

У меня есть сложный RecyclerView.ViewHolder.Учитывая, что мое приложение предназначено для планшетов, в пользовательском интерфейсе больше места, что обеспечивает большую сложность.Когда пользователь нажимает кнопку внутри этого ViewHolder, я должен отобразить другой RecyclerView внутри ViewHolder.Учитывая, что вторичный RecyclerView необходим только тогда, когда пользователь нажимает кнопку, я не хочу загружать ее сразу, а разделяю на фрагмент, который будет загружен только тогда, когда пользователь нажимает кнопку внутри ViewHolder

В XML для моего ViewHolder я объявил Framelayout через:

<FrameLayout
    android:id="@+id/fragmentContainer"
    app:layout_constraintTop_toBottomOf="@id/counter"

    android:layout_height="wrap_content"
    android:layout_width="match_parent"/>

Я вызываю элементы, которые первичный RecyclerView отображает stack.К сожалению, когда пользователь нажимает кнопку стека с id=5, дополнительный фрагмент для вторичного RecyclerView добавляется в ViewHolder для id=1, который отображается первым в первичном RecyclerView.

customizationButtonView.setOnClickListener {
    val fragmentTransaction = activity.supportFragmentManager.beginTransaction()
    if (customizationFragment==null){
        stack?.let{ stack ->
            fragmentContainer.tag = stack.id.toString()

            val frag = StackCustomizationFragment(stack)
            customizationFragment = frag
            fragmentTransaction.replace(R.id.fragmentContainer, frag, stack.id.toString())
        }
    }
    else{
        customizationFragment?.let { fragmentTransaction.remove(it) }
        customizationFragment = null
    }
    fragmentTransaction.commit()
}

Даже пометки, кажется, игнорируются.Есть ли другой способ сообщить FragmentManager о загрузке фрагмента в правильном R.id.fragmentContainer?

1 Ответ

2 голосов
/ 17 июня 2019

Вы можете установить идентификатор для вашего вида с помощью

frameLayout.setId(uniqueId)

, который вы бы присвоили своему виду в методе связывания, основываясь на положении привязываемого элемента.Например, вы можете использовать position + PREDEFINED_OFFSET.

, тогда вы надуваете свой макет в position + PREDEFINED_OFFSET.

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