Android val не может быть переназначен - PullRequest
0 голосов
/ 21 января 2019

Я определил переменную с именем notes, когда я пытаюсь изменить ее из метода, android studio сообщает

val не может быть переназначен

однако я могу изменить его, если получу доступ к переменной следующим образом: 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()
}

Почему это происходит?

Я пришел из фона Javascript, так что извините за мое невежество.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

В Kotlin

val - Когда вы объявили какую-либо переменную в Koltin как конечная переменная , поэтому после ее присвоения мы не можем изменить ее значение.

Так что используйте var , когда вам нужно определить / изменить значение при запуске приложения

0 голосов
/ 21 января 2019

Вы назвали две вещи notes:

private var notes = emptyList<Note>()

и

fun setNotes(notes: List<Note>)

Итак, в функции setNotes(), notes относится к параметру функции. Это рассматривается как val и не может быть переназначено. this.notes относится к свойству notes, определенному в вашем NoteAdapter классе.

В общем, старайтесь использовать разные имена, чтобы уменьшить путаницу. Например, вы можете использовать:

fun setNotes(replacementNotes: List<Note>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...