【问题标题】:Type mismatch: inferred type is GroupsFragment but Context! was expected类型不匹配:推断类型是 GroupsFragment 但 Context!预计
【发布时间】:2020-04-12 09:34:21
【问题描述】:

我正在学习如何解析 JSON 并使用数据将其放入 recyclerview 列表中,并且我正在片段中进行操作。这让人很头疼,还有各种各样的错误。第一个是上下文!这是 GroupFragment.kt 文件内容:

package com.locos.riders

import android.graphics.Color
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.fragment_groups.*
import com.locos.riders.UserListAdapter

class GroupsFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_groups, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        userlist.layoutManager = LinearLayoutManager(this)
        userlist.adapter = UserListAdapter


    }


}

当我运行它时,我得到类型不匹配:推断类型是 GroupsFragment 但上下文!是预期的。

在我的 UserListAdapter.kt 中,我正在尝试加载 userlist_row,但我也找不到此布局资源,即使该文件已创建并位于 layout/ 文件夹中:

package com.locos.riders

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.userlist_row.view.*

class UserListAdapter: RecyclerView.Adapter<CustomViewHolder>() {

    // number of items
    override fun getItemCount(): Int {
        return 3
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): CustomViewHolder {
        val layoutInflater = LayoutInflater.from(parent?.context)
        val cellForRow = layoutInflater.inflate(R.layout.userlist_row, parent, false)
        return CustomViewHolder(cellForRow)
    }

    override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
        holder.view.listTitle?.text = "123"
    }

}

class CustomViewHolder(val view: View): RecyclerView.ViewHolder(view) {

}

【问题讨论】:

  • 试试 LinearLayoutManager(context)
  • 成功了!但是现在 Classifier 'UserListAdapter' 没有伴随对象,因此必须在这里初始化
  • userlist.adapter = UserListAdapter()

标签: android-studio kotlin


【解决方案1】:

您有一些拼写错误,通常可以通过阅读错误来修复。

以下是这些错误的解决方案:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    userlist.layoutManager = LinearLayoutManager(context) // <- context == getContext() in java
    userlist.adapter = UserListAdapter() // <- put parentheses over here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多