我有一个复杂的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
中?
答案 0 :(得分:2)
您可以通过以下方式为视图设置ID:
frameLayout.setId(uniqueId)
您将根据绑定项目的位置在bind方法中为视图分配一个ID。例如,您可以使用position + PREDEFINED_OFFSET
。
然后您将在position + PREDEFINED_OFFSET
中增加布局。