繁体   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