У меня есть фрагмент внутри RecyclerView. Я получаю данные для RecyclerView
с помощью SQL-запроса, который я вызываю OnViewCreated
.
. Когда я впервые вхожу в этот фрагмент, RecyclerView
отображается нормально, но если я оставлю этоFragment
(с помощью кнопки назад) и снова войдите в этот Fragment
, RecyclerView
не появляется. Таким образом, RecyclerView появляется только один раз.
Ниже приведены некоторые коды:
private var itemArray = arrayListOf<Item>()
private lateinit var itemRecycler: RecyclerView
private lateinit var itemAdapter: ItemAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.item_fragment, container, false)
itemRecycler = view.findViewById(R.id.item_recycler)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
populateItemArray {
// Init Adapter
itemAdapter = ItemAdapter(itemArray)
// Set adapter to recycler
itemRecycler.apply {
layoutManager = LinearLayoutManager(context!!, LinearLayoutManager.HORIZONTAL, false)
adapter = itemAdapter
}
}
}
private fun populateItemArray(completion: () -> Unit) {
SQLiteManager(context!!).getItems() { defaultItemArray ->
itemArray.addAll(defaultItemArray.filter { it.itemId == 67 })
completion()
}
}
Примечание. Каждый раз, когда я вхожу в этот фрагмент, я получаюсписок из почти 6 предметов.
Я использую Jetpack Navigation Component
. Я впервые захожу в Fragment
, где все работает нормально, затем возвращаюсь к предыдущему фрагменту на BackButton
, затем, наконец, снова в Fragment
, как в первый раз, но RecyclerView
не появляется (другие виды отображаются нормально).
РЕДАКТИРОВАТЬ:
Кажется, проблема в том, что RecyclerView имеет android:layout_width="wrap_content"
. Когда я использую match_parent
, появляется RecyclerView. Я использовал wrap_content
, потому что я хотел центрировать RecyclerView. Ниже XML:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/item_recycler"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/item_image"
app:layout_constraintBottom_toTopOf="@id/item_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:overScrollMode="never"/>
Обратите внимание, что когда я устанавливаю новые параметры LayoutParams, как это
itemRecycler.layoutParams = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT)
Появляется RecyclerView (но плохо размещен)
РЕШЕНИЕ:
Я нашел решение этой проблемы: я снова установил ширину RecyclerView как wrap_content после установки Адаптера:
val params = itemRecycler.layoutParams
params.width = ConstraintLayout.LayoutParams.WRAP_CONTENT
itemRecycler.layoutParams = params
itemRecycler.requestLayout()
Это решило проблему для меня. Спасибо за вашу помощь, я надеюсь, что это может быть полезно для кого-то.
Извините за мой плохой английский, и спасибо за вашу помощь