web-dev-qa-db-ja.com

Kotlinはフラグメントの型の不一致を示しました

中にRecyclerAdapterがあるフラグメントがあります。 onCreateViewメソッドでアダプターを初期化したいのですが、このステートメントで"Type mismatch. Required : Context , Found : FragmentActivity"のエラーがスローされます

最初のエラーでこのエラーが発生し、2番目のエラーでコンパイル時エラーが発生しなかった理由はわかりません。

エラーが表示されました

recyclerView!!.adapter = RestaurantMenuAdapter(activity)

エラーは表示されません

recyclerView!!.layoutManager = LinearLayoutManager(activity)

Fragment.kt

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    val view = inflater.inflate(R.layout.fragment_restaurant_menu, container, false)
    recyclerView = view.findViewById(R.id.restaurant_container)
    recyclerView!!.adapter = RestaurantMenuAdapter(activity)
    recyclerView!!.layoutManager = LinearLayoutManager(activity)

RecyclerAdapter.kt

class RestaurantMenuAdapter  (val context : Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val inflater = parent.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        return object : RecyclerView.ViewHolder(inflater.inflate(R.layout.item_menu1, parent, false)) {

        }
    }

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

    }

    override fun getItemCount(): Int {
        return 10
    }
}
8
Long Ranger

これを次のように変更します:

recyclerView!!.adapter = RestaurantMenuAdapter(activity)

に-:

recyclerView!!.adapter = RestaurantMenuAdapter(activity.applicationContext)
11
Shivam Oberoi

アダプタはそのままにして、「アクティビティ!!」アダプターを初期化している場所。

recyclerView.adapter = RestaurantMenuAdapter(activity!!)

アダプターは同じままです。

class RestaurantMenuAdapter  (val context : Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    val inflater = parent.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    return object : RecyclerView.ViewHolder(inflater.inflate(R.layout.item_menu1, parent, false)) {

    }
}

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

}

override fun getItemCount(): Int {
    return 10
}
}
2
Nauman Ash

リサイクラーアダプターのコンテキストからアクティビティへの変更。

class RestaurantMenuAdapter  (val context : Activity) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val inflater = parent.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        return object : RecyclerView.ViewHolder(inflater.inflate(R.layout.item_menu1, parent, false)) {

        }
    }

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

    }

    override fun getItemCount(): Int {
        return 10
    }
}
0
Yogesh Paliyal
recyclerView!!.adapter = RestaurantMenuAdapter(this)

recyclerView!!.adapter = RestaurantMenuAdapter(this.requireActivity())
0
Shivam Tripathi