RecyclerView.ViewHolder中的FragmentTranscation

时间:2019-06-17 15:19:11

标签: android android-fragments kotlin android-recyclerview

我有一个复杂的RecyclerView.ViewHolder。鉴于我的应用是针对平板电脑的,因此有更多的空间可让用户界面更加复杂。当用户单击该ViewHolder中的按钮时,我必须在ViewHolder中显示另一个RecyclerView。鉴于仅在用户按下按钮时才需要辅助RecyclerView,所以我不想立即加载它,而是将其分离为一个片段,该片段仅在用户单击ViewHolder中的按钮时才加载

在ViewHolder的XML中,我通过以下方式声明了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的辅助Fragment被添加到id=1的ViewHolder中,该视图首先在主要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将Fragment加载到正确的R.id.fragmentContainer中?

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式为视图设置ID:

frameLayout.setId(uniqueId)

您将根据绑定项目的位置在bind方法中为视图分配一个ID。例如,您可以使用position + PREDEFINED_OFFSET

然后您将在position + PREDEFINED_OFFSET中增加布局。