我对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>
[您正在看到此错误消息是因为?.
中的安全调用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
}