尝试在 Kotlin 片段中实现 RecyclerView
Trying to implement a RecyclerView in a Kotlin Fragment
我正在尝试实现 RecyclerView,我遵循了本教程:
https://developer.android.com/codelabs/basic-android-kotlin-training-recyclerview-scrollable-list#4
但我试图将它实现到一个片段而不是主要片段中 activity,但它最终无法正常工作,所以我开始学习本教程:https://www.youtube.com/watch?v=__gxd4IKVvk
大约 24 分钟后,我们将代码写入片段的 .kt 文件中,而他使用的是现已弃用的方法 (onActivityCreated),因此我将代码放入 onCreateView 中。他可以通过将 xml 文件写成 var 来访问 id,但这对我不起作用,所以我在将布局扩展到 val“视图”后访问了它。然后他访问了 RecyclerView 的一些属性(.layoutManager、.itemAnimator、.adapter),但是 IDE 表示这些都是未解析的引用。我在网上找到的所有内容都表明它应该可以正常工作,或者我应该使用“.setLayoutManager”和“.setAdapter”,但它们会给出相同的错误。我不明白我错过了什么。
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_exercises, container, false)
val recyclerItems = view.findViewById<RecyclerView>(R.id.exercise_recycler_view)
.hasFixedSize()
recyclerItems.layoutManager = LinearLayoutManager(context)
recyclerItems.itemAnimator = DefaultItemAnimator()
recyclerItems.adapter = ExerciseItemAdapter(viewModel)
return view
}
这是.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".fragments.ExercisesFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/exercise_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="LinearLayoutManager" />
</LinearLayout>
我浏览了您提供的视频。
视频中的人能够直接访问 RecyclerView
,因为他正在使用 kotlin 合成插件:
apply plugin: 'kotlin-android-extensions'
注意:哪个已弃用,您使用的是正确的。或者您可以使用更新的 ViewBinding。
为什么那些未解决的引用?
因为
val recyclerItems = view.findViewById<RecyclerView>(R.id.exercise_recycler_view)
.hasFixedSize()
recyclerItems
变成 Boolean
类型而不是 RecyclerView
.
所以这样做:
val recyclerItems = view.findViewById<RecyclerView>(R.id.exercise_recycler_view)
recyclerItems.hasFixedSize()
我正在尝试实现 RecyclerView,我遵循了本教程: https://developer.android.com/codelabs/basic-android-kotlin-training-recyclerview-scrollable-list#4
但我试图将它实现到一个片段而不是主要片段中 activity,但它最终无法正常工作,所以我开始学习本教程:https://www.youtube.com/watch?v=__gxd4IKVvk
大约 24 分钟后,我们将代码写入片段的 .kt 文件中,而他使用的是现已弃用的方法 (onActivityCreated),因此我将代码放入 onCreateView 中。他可以通过将 xml 文件写成 var 来访问 id,但这对我不起作用,所以我在将布局扩展到 val“视图”后访问了它。然后他访问了 RecyclerView 的一些属性(.layoutManager、.itemAnimator、.adapter),但是 IDE 表示这些都是未解析的引用。我在网上找到的所有内容都表明它应该可以正常工作,或者我应该使用“.setLayoutManager”和“.setAdapter”,但它们会给出相同的错误。我不明白我错过了什么。
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_exercises, container, false)
val recyclerItems = view.findViewById<RecyclerView>(R.id.exercise_recycler_view)
.hasFixedSize()
recyclerItems.layoutManager = LinearLayoutManager(context)
recyclerItems.itemAnimator = DefaultItemAnimator()
recyclerItems.adapter = ExerciseItemAdapter(viewModel)
return view
}
这是.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".fragments.ExercisesFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/exercise_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="LinearLayoutManager" />
</LinearLayout>
我浏览了您提供的视频。
视频中的人能够直接访问 RecyclerView
,因为他正在使用 kotlin 合成插件:
apply plugin: 'kotlin-android-extensions'
注意:哪个已弃用,您使用的是正确的。或者您可以使用更新的 ViewBinding。
为什么那些未解决的引用?
因为
val recyclerItems = view.findViewById<RecyclerView>(R.id.exercise_recycler_view)
.hasFixedSize()
recyclerItems
变成 Boolean
类型而不是 RecyclerView
.
所以这样做:
val recyclerItems = view.findViewById<RecyclerView>(R.id.exercise_recycler_view)
recyclerItems.hasFixedSize()