簡體   English   中英

Kotlin中需要ViewHolder getter / setter中的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM