実現したいこと
Fragmentを継承したクラスでRecyclerViewにセットするAdapterを作りたい
前提
Bluetoothデバイスをスキャンした際に取得したデバイス名を画面のリストに表示するアプリを作っています。
スキャンしてデバイス情報を取得時にFragmentを継承したクラスでデリゲート関数が発動してその中でRecyclerViewの要素を更新する処理をしようとしています。
その際にArrayAdapterでアダプターを作ろうとしたらエラーが発生しました。
発生している問題・エラーメッセージ
None of the following functions can be called with the arguments supplied. <init>(Context, Int, Array<(out) TypeVariable(T)!>) where T = TypeVariable(T) for constructor ArrayAdapter<T : Any!>(context: Context, resource: Int, objects: Array<(out) T!>) defined in android.widget.ArrayAdapter <init>(Context, Int, Int) where T = TypeVariable(T) for constructor ArrayAdapter<T : Any!>(context: Context, resource: Int, textViewResourceId: Int) defined in android.widget.ArrayAdapter <init>(Context, Int, (Mutable)List<TypeVariable(T)!>) where T = TypeVariable(T) for constructor ArrayAdapter<T : Any!>(context: Context, resource: Int, objects: (Mutable)List<T!>) defined in android.widget.ArrayAdapter
該当のソースコード
kotlin
1// BLEデバイスが新たに発見された時に呼ばれるデリゲート関数 2 override fun didDiscoverDevice( deviceName: String ) { 3 // ここでリサイクルビューの要素を更新したい 4 val bleListStr = bleManager.deviceArray.toString() 5 val bleStrArray = bleListStr.split(",") 6 // ArrayAdapterに赤波下線が表示されてエラーとなっている 7 val arrayAdapter = ArrayAdapter(activity, binding?.rvMainMenu, bleStrArray) } 8 binding?.rvMainMenu?.adapter = arrayAdapter 9 }
試したこと
ArrayAdapterに用いている引数に問題があると思い、第一引数はFragmentでContextを取得するために「getActivity」にしたところ自動変換で「avtivity」になりました。
第二引数は通常ならば「R.id.〜〜〜」と取得しますがFragmentではそれではUIパーツが取得できないため「binding」を用いてレイアウトファイルにあるリサイクルビューのIDを指定して取得しています。
第三引数はコードを見て分かるようにデバイス情報リストを文字列化したものをカンマで区切って配列にした文字列の配列を用いています。
補足情報(FW/ツールのバージョンなど)
Android Studio Electric Eel | 2022.1.1 Patch 1
Build #AI-221.6008.13.2211.9514443, built on January 21, 2023
