Kotlin E/RecyclerView:无适配器连接的跳过布局
我对Kotlin E/RecyclerView:无适配器连接的跳过布局,kotlin,android-recyclerview,Kotlin,Android Recyclerview,我对片段中的RecyclerView有问题。在main活动中我有一个TabLayout和一个ViewPager。我想在我的第一个选项卡中显示RecyclerView,但我一直收到以下错误: E/RecyclerView:未连接适配器;跳过布局 我已尝试将回收器适配器初始化移动到OnViewCreated,但没有结果 这是我的片段代码: override fun onCreateView( inflater: LayoutInflater, container: ViewGroup
片段中的RecyclerView
有问题。在main活动中
我有一个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())
}
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看?{
添加(0,问候语模型(“问候语1”,R.drawable.ic_启动器_背景))
添加(1,问候语模型(“问候语2”,R.drawable.Greeting_1))
添加(2,问候语模型(“问候语3”,R.drawable.Greeting_1))
添加(3,问候语模型(“问候语4”,R.drawable.Greeting_1))
添加(4,问候语模型(“问候语5”,R.drawable.Greeting_1))
问候语列表?添加(5,问候语模型(“问候语6”,R.drawable.Greeting_1))
添加(6,问候语模型(“问候语7”,R.drawable.Greeting_1))
添加(7,问候语模型(“问候语8”,R.drawable.Greeting_1))
val recyclerView=容器?.findViewById(R.id.recyclerView)
val经理=线性布局经理(活动)
recyclerView?.setHasFixedSize(真)
recyclerView?.layoutManager=manager
recyclerView?.adapter=欢迎适配器
返回充气机。充气(R.layout.fragment_类别,容器,假)
}
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
greetingAdapter=greetingAdapter(activity!!,ListofGeetings!!.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,因此它不会被执行,因为您在视图充气之前调用它,即充气器。充气(R.layout.fragment\u 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))
//This varaible will holds a reference to the inflated view.
val view = inflater.inflate(R.layout.fragment_category, container, false)
//Get the recyclerView from the inflated view.
val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
val manager = LinearLayoutManager(activity)
//No need to the safe call ?. here because recyclerView won't be null.
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = manager
recyclerView.adapter = greetingAdapter
return view
}
这将检查如果列表问候语
不等于null,则将在应用
块中执行代码:
apply{
//block
}
您之所以看到此错误消息,是因为recyclerView?.adapter=greetingAdapter
中的安全调用?。
将返回null,因此它不会被执行,因为您在视图充气之前调用它,即充气器。充气(R.layout.fragment\u 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))
//This varaible will holds a reference to the inflated view.
val view = inflater.inflate(R.layout.fragment_category, container, false)
//Get the recyclerView from the inflated view.
val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
val manager = LinearLayoutManager(activity)
//No need to the safe call ?. here because recyclerView won't be null.
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = manager
recyclerView.adapter = greetingAdapter
return view
}
这将检查如果列表问候语
不等于null,则将在应用
块中执行代码:
apply{
//block
}
当使用
onViewCreated()
和使用view.findViewById()
时,是否仍会出现错误?使用onViewCreated()膨胀依赖于根视图的视图。@TaseerAhmad是的。它仍然给出错误,没有结果(@MartinMarconcini我已经在onViewCreated上移动了我的回收器视图初始化,但没有帮助(覆盖onViewCreated(视图:view,savedInstanceState:Bundle?{super.onViewCreated(视图,savedInstanceState)val recyclerView=view.findViewById(R.id.recyclerView)val manager=LinearLayoutManager(活动)recyclerView?.setHasFixedSize(true)recyclerView?.layoutManager=manager recyclerView?.adapter=greetingAdapter greetingAdapter=greetingAdapter(活动!!,浏览列表!!.toList())}错误告诉您,在布局过程中,您的RecyclerView还没有适配器,因此它的布局过程将被跳过(因为没有适配器的RecyclerView基本上是无用的);尝试将recyclerView?.adapter=greetingAdapter
行移到您获取引用的正下方。同时发布您的适配器,如果我们看不到它,很难判断适配器是否工作正常;)使用onViewCreated()
和使用view.findViewById()
?使用onViewCreated()时,它是否仍会出错膨胀依赖于根视图的视图。@TaseerAhmad是的。它仍然给出错误,没有结果(@MartinMarconcini我已将回收器视图初始化移到onViewCreated上,但没有帮助(覆盖onViewCreated(视图:view,savedInstanceState:Bundle?{super.onViewCreated(视图,savedInstanceState)val recyclerView=view.findViewById(R.id.recyclerView)val manager=LinearLayoutManager(活动)recyclerView?.setHasFixedSize(true)recyclerView?.layoutManager=manager recyclerView?.adapter=greetingAdapter greetingAdapter=greetingAdapter(活动!!,listOfGreetings!!.toList())}错误告诉您,在布局过程中,您的RecyclerView还没有适配器,因此它的布局过程将被跳过(因为没有适配器的RecyclerView基本上是无用的);尝试将recyclerView?.adapter=greetingAdapter
行移到您获取参考的正下方。同时发布适配器,如果我们看不到,很难判断适配器是否工作正常;)另外,请注意,kotlin提供了一种从膨胀的布局中获取特定视图的更简单方法,因此您可以直接执行以下操作view.recyclerView
,而无需调用view.findViewById()
。非常感谢:)您的代码可以工作)只有我移动了greetingAdapter=greetingAdapter(activity!!,listOfGreetings!!.toList())在我看来,它对你有效,如果你愿意,你可以接受我的回答