No estoy seguro de lo que está pasando. Esto funcionó bien en Java, pero cuando cambié a Kotlin, realmente no sé cómo hacer que esto funcione. Recibo este error Pero recibo el mismo error que es
Property getter or setter required en el val mMoment: Moment
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 } } También probé var lateinit mMoment: Moment Pero recibo el mismo error.
Ahora, el objeto de momento es un objeto de datos de Kotlin, no estoy seguro de si eso causaría un problema.
Esto funcionó en Java, pero por alguna razón a Kotlin no parece gustarle la creación de instancias del objeto de esta manera. no sé por qué ¡Gracias por cualquier ayuda!
En Java fue:
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; } }Una posible causa de este error podría ser que esta clase de datos se use para mi ROOMDatabase. Es un objeto de entidad que estaba arrastrando a la interfaz de usuario. Tal vez esta no es una forma adecuada de hacer las cosas. No sé.
Lazy es donde inicializará la variable solo cuando se use, pero requiere algo de código al declararla como perezosa.
Por ejemplo val mMoment by lazy { // Some code that generates this }
Como su variable se inicializará en un enlace, debe hacer:
lateinit var mMoment: Moment
Esto significa que se inicializará más adelante. Si intenta usarlo sin inicializarlo, su programa generará una excepción.
O si esto potencialmente nunca se vinculará, debe inicializarlo como un valor anulable:
var mMoment: Moment? = null