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())在我看来,它对你有效,如果你愿意,你可以接受我的回答