Требуется объект в ViewHolder getter / setter на Kotlin - PullRequest
0 голосов
/ 24 февраля 2019

не уверен, что происходит.Это хорошо работало в Java, но при переходе на Kotlin я не знаю, как это сделать.Я получаю эту ошибку, но я получаю ту же ошибку, которая

Property getter or setter required на val mMoment: Момент

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 Но я получаю ту же ошибку.

Теперь, когда объект является объектом данных 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.Это объект сущности, который я перетаскивал в пользовательский интерфейс.Может быть, это неправильный способ делать вещи.Я не знаю.

1 Ответ

0 голосов
/ 24 февраля 2019

Lazy - это место, где инициализируется переменная только тогда, когда она используется, но при объявлении ее как lazy требуется некоторый код.

Например, val mMoment by lazy { // Some code that generates this }

Поскольку ваша переменная будет инициализированав привязке вы должны сделать:

lateinit var mMoment: Moment

Это означает, что он будет инициализирован позже.Если вы попытаетесь использовать его без инициализации, ваша программа выдаст исключение.

Или, если это потенциально никогда не будет связано, вы должны инициализировать его как обнуляемое значение:

var mMoment: Moment? = null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...