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