使用 Jetpack 导航组件第二次进入片段时,RecyclerView 不出现

问题描述 投票:0回答:2

我有一个位于 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()

这解决了我的问题。感谢您的帮助,我希望它对某人有用。

抱歉我的英语不好,谢谢你的帮助

android kotlin android-recyclerview
2个回答
0
投票

我从服务器获取结果后再次设置适配器解决了这个问题

contactsAdapter = ContactsAdapter(this, readContactsArray)
contactsRecyclerView.adapter = contactsAdapter

0
投票

获取数据后添加“RecyclerView.setAdapter(yourAdapter)”即可

© www.soinside.com 2019 - 2024. All rights reserved.