E / RecyclerView:未连接适配器,跳过布局

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

我对RecyclerView中的Fragment有问题。在MainActivity中,我有一个TabLayout和一个ViewPager。我想在第一个选项卡中显示RecyclerView,但我不断收到以下错误:

E / RecyclerView:未连接适配器;跳过布局

我已尝试将回收站适配器初始化移至OnViewCreated,但没有结果。

这是我的片段代码:

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        listOfGreetings?.add(0, GreetingModel("Greeting 1", R.drawable.ic_launcher_background))
        listOfGreetings?.add(1, GreetingModel("Greeting 2", R.drawable.greeting_1))
        listOfGreetings?.add(2, GreetingModel("Greeting 3", R.drawable.greeting_1))
        listOfGreetings?.add(3, GreetingModel("Greeting 4", R.drawable.greeting_1))
        listOfGreetings?.add(4, GreetingModel("Greeting 5", R.drawable.greeting_1))
        listOfGreetings?.add(5, GreetingModel("Greeting 6", R.drawable.greeting_1))
        listOfGreetings?.add(6, GreetingModel("Greeting 7", R.drawable.greeting_1))
        listOfGreetings?.add(7, GreetingModel("Greeting 8", R.drawable.greeting_1))


        val recyclerView = container?.findViewById<RecyclerView>(R.id.recyclerView)
        val manager = LinearLayoutManager(activity)



        recyclerView?.setHasFixedSize(true)
        recyclerView?.layoutManager = manager



        recyclerView?.adapter = greetingAdapter

        return inflater.inflate(R.layout.fragment_category, container, false)

    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        greetingAdapter = GreetingAdapter(activity!!, listOfGreetings!!.toList())
    }

这里是XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"
             tools:context=".CategoryFragment">

    <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="3dp"
            />

</FrameLayout>
kotlin android-recyclerview recycler-adapter
1个回答
0
投票

[您正在看到此错误消息是因为?.中的安全调用recyclerView?.adapter = greetingAdapter将返回null,所以它不会被执行,因为您是在视图膨胀为inflater.inflate(R.layout.fragment_category, container, false)之前调用它的,因此可以解决该问题:创建一个具有膨胀视图值的变量,然后使用它从中获取视图并返回它,就像这样:


override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {


listOfGreetings?.add(0, GreetingModel("Greeting 1", R.drawable.ic_launcher_background))
        listOfGreetings?.add(1, GreetingModel("Greeting 2", R.drawable.greeting_1))
        listOfGreetings?.add(2, GreetingModel("Greeting 3", R.drawable.greeting_1))
        listOfGreetings?.add(3, GreetingModel("Greeting 4", R.drawable.greeting_1))
        listOfGreetings?.add(4, GreetingModel("Greeting 5", R.drawable.greeting_1))
        listOfGreetings?.add(5, GreetingModel("Greeting 6", R.drawable.greeting_1))
        listOfGreetings?.add(6, GreetingModel("Greeting 7", R.drawable.greeting_1))
        listOfGreetings?.add(7, GreetingModel("Greeting 8", R.drawable.greeting_1))



 val view = inflater.inflate(R.layout.fragment_category, container, false)

 val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
 val manager = LinearLayoutManager(activity)

 recyclerView?.setHasFixedSize(true)
 recyclerView?.layoutManager = manager



 recyclerView?.adapter = greetingAdapter

 return view 
}
© www.soinside.com 2019 - 2024. All rights reserved.