android-fragments 尝试在Kotlin片段中实现RecyclerView

igsr9ssn  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(179)

我正在尝试实现一个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中。他可以通过将id写为var来访问xml文件中的id,但这对我来说不起作用,因此我在将布局膨胀到瓦尔“视图”中之后访问了它。(.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>
hl0ma9xz

hl0ma9xz1#

我看了你提供的视频。
视频中的人能够直接访问RecyclerView,因为他使用的是Kotlinsynthetic插件:

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()

相关问题