[英]Object in ViewHolder getter/setter required on Kotlin
不知道發生了什么事。 這在Java中運行良好,但是當切換到Kotlin時,我真的不知道如何使這項工作。 我得到這個錯誤但是我得到了同樣的錯誤
val mMoment Property getter or setter required
:瞬間
class SquareViewHolder(v: CardView, viewModel: BarreViewModel) : RecyclerView.ViewHolder (v) {
val mImage: ImageView
val by lazy mMoment: Moment
init {
mImage = v.findViewById(R.id.square_moment)
mImage.setOnClickListener {
//val focused = ArrayList<Moment>(0)
//focused.add(mMoment)
//viewModel.focusedMoments = focused
//viewModel.setItemClicked(true)
}
}
fun bind(moment: Moment) {
val mMoment = moment
}
}
我也試過var lateinit mMoment: Moment
但是我收到同樣的錯誤。
現在,moment對象是Kotlin數據對象,我不確定這是否會導致問題。
這適用於java,但由於某種原因,kotlin似乎不喜歡這種方式對象的實例化。 我不知道為什么。 謝謝你的幫助!
在Java中它是:
public class SquareMomentViewHolder extends RecyclerView.ViewHolder {
public ImageView mImage;
public Moment mMoment;
BarreChatViewModel viewModel;
public SquareMomentViewHolder(CardView v, BarreChatViewModel viewModel) {
super(v);
mImage = v.findViewById(R.id.square_moment);
mImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Moment> focused = new ArrayList(0);
focused.add(mMoment);
viewModel.setFocusedMoments(focused);
viewModel.setItemClicked(true);
}
});
}
public void bind(Moment moment) {
mMoment = moment;
}
}
導致此錯誤的可能原因可能是此數據類用於我的ROOMDatabase。 這是我拖動到用戶界面的實體對象。 也許這不是一種正確的做事方式。 我不知道。
Lazy是僅在使用變量時才初始化變量的地方,但在將變量聲明為惰性時需要一些代碼。
例如, val mMoment by lazy { // Some code that generates this }
由於您的變量將在綁定中初始化,您應該:
lateinit var mMoment: Moment
這意味着它將在稍后初始化。 如果您嘗試在沒有初始化的情況下使用它,您的程序將拋出異常。
或者,如果這可能永遠不會被綁定,您應該將其初始化為可以為空的值:
var mMoment: Moment? = null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.