【问题标题】:Kotlin Synthetic: Unrecognized Variables in RecyclerView AdapterKotlin Synthetic:RecyclerView 适配器中无法识别的变量
【发布时间】:2018-01-23 18:17:57
【问题描述】:

当尝试在 RecyclerView.Adapter 中使用 Kotlin 扩展来引用 XML 布局文件中的视图时,Intellij 无法通过其 ID 识别视图,即使导入看似正确。奇怪的是,它可以在 Activity 或 Fragment 内部工作。 是否需要额外的上下文才能在 RecyclerView.Adapter 中工作?

Intellisense 没有在 RecyclerView.Adapter 实现中获取视图:

发现视图具有几乎相同的导入

这是我的 XML,以防万一

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    >

    <LinearLayout
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_list_repo_name"
            android:text="@string/repo_name"
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/tv_item_repo_description"
            android:text="@string/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center_vertical">

        <TextView
            android:id="@+id/tv_item_forks"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableStart="@drawable/ic_fork"
            android:text="10"
            android:gravity="end"/>

        <TextView
            android:id="@+id/tv_item_stars"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableStart="@drawable/ic_star"
            android:gravity="end"
            android:text="14,000"
            />


    </LinearLayout>


</LinearLayout>

【问题讨论】:

  • 你看到这个question了吗?
  • 是的,感谢您以防万一。我有一个相同的导入方案,甚至尝试同时导入 kotlinx.....yourview.* 和 kotlinx....yourview.view.*
  • 它不能直接在您的 getItemCount 方法中工作。要访问它,您需要使用 viewHolder 类中的视图。
  • 在考虑您的观点之后,在接受 View 参数的自定义 Viewholder 中尝试时,同样的问题也适用。这也适用于适配器类中的 onCreateViewHolder

标签: android android-layout android-linearlayout kotlin-android-extensions


【解决方案1】:

您似乎正试图将视图 置于 onBindViewHolder 之外。

请看一下这个示例:

import kotlinx.android.synthetic.main.row_badges_item.view.*

class BadgesAdapter(private val mActivity: Activity) : RecyclerView.Adapter<BadgesAdapter.ViewHolder>() {

override fun onBindViewHolder(holder: ViewHolder, position: Int) {

    holder.bind(position)
}

override fun getItemCount(): Int {
     ba // Error here
    return mData.size
}

inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {

    fun bind(position: Int) {

        with(itemView) {

            val badge = mData[position] 

            badges_title.text = badge.badgeTitle // Fine here                
        }

    }

}

}

希望对您有所帮助。谢谢。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2015-05-14
    • 1970-01-01
    • 2021-02-27
    • 2013-05-15
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多