Definí una variable llamada notas, cuando trato de modificarla desde un método, Android Studio dice
val no se puede reasignar
sin embargo, puedo modificarlo si accedo a la variable de esta manera: this.notes .
class NoteAdapter(var context : Context) : RecyclerView.Adapter<NoteViewHolder>(){ private var notes = emptyList<Note>() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder { var itemView = LayoutInflater.from(context).inflate(R.layout.note_item, parent, false) return NoteViewHolder(itemView) } override fun getItemCount(): Int { return notes.size } fun setNotes(notes: List<Note>) { this.notes = notes notifyDataSetChanged() }¿Por qué está pasando esto?
Vengo de un fondo de Javascript, así que disculpe mi ignorancia.
Usted nombró dos notes cosas:
private var notes = emptyList<Note>()y:
fun setNotes(notes: List<Note>) Entonces, en la función setNotes() , las notes se refieren al parámetro de la función. Eso se trata como un val y no se puede reasignar. this.notes se refiere a la propiedad de notes definida en su clase NoteAdapter .
En general, trate de usar nombres diferentes para reducir la confusión. Por ejemplo, podrías usar:
fun setNotes(replacementNotes: List<Note>)En Kotlin,
val : cuando declaró cualquier variable en Koltin como variable final, una vez asignada, no podemos cambiar el valor de la misma.
Entonces use var cuando necesite definir/cambiar el valor mientras ejecuta la aplicación