実現したいこと
RecyclerViewのViewHolderで対応するXMLのビューをビューバインドで取得するにはどのようにすればよいでしょうか?
試したこと
ViewHolderで取得したいビューのXMLは、one_layout.xmlとして作成しました。
その中にTextViewを配置しています。
findViewByIdを使う方法であれば実装できました。
Koitlin
1import android.view.View 2import android.widget.TextView 3import androidx.recyclerview.widget.RecyclerView 4 5class ViewHolderItem (itemView: View): RecyclerView.ViewHolder(itemView){ 6 val itemName:TextView = itemView.findViewById(R.id.myTextView) 7}
ただし、findViewByIdは非推奨らしいので、後継のビューバインドを使って実装したいです。
試しに、以下のように記述してみたところ、
Koitlin
1import android.view.View 2import android.widget.TextView 3import androidx.recyclerview.widget.RecyclerView 4import com.xxxx.xxxx.databinding.OneLayoutBinding 5 6class ViewHolderItem (itemView: View): RecyclerView.ViewHolder(itemView){ 7 private lateinit var binding: OneLayoutBinding 8 binding = OneLayoutBinding.inflate(layoutInflator) 9}
以下のようなエラーとなってしまいました。
Expecting member declaration
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
Android Studio Flamingo | 2022.2.1
追記
コンストラクタで処理を書くことを試しました。
import android.view.LayoutInflater import android.view.View import androidx.recyclerview.widget.RecyclerView import com.mytest.kotlinapp01.databinding.OneLayoutBinding import kotlin.coroutines.jvm.internal.CompletedContinuation.context class ViewHolderItem (itemView: View): RecyclerView.ViewHolder(itemView){ private lateinit var binding: OneLayoutBinding init{ val layoutInflater = LayoutInflater.from(context) binding = OneLayoutBinding.inflate(layoutInflator) } }
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/06/06 10:32
2023/06/06 11:27 編集