不确定发生了什么。这在Java中工作正常,但是当切换到Kotlin时,我真的不知道如何使它工作。我得到这个错误 但是我得到了同样的错误
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
}
}
在val mMoment上:Moment
var lateinit mMoment: Moment
我也尝试过
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;
}
}
但是我收到同样的错误。
现在,此刻对象是Kotlin数据对象,我不确定是否会引起问题。
这在Java上有效,但是由于某种原因,kotlin似乎不喜欢这种方式的对象实例化。我不知道为什么感谢您的帮助!
在Java中是:
{{1}}
此错误的可能原因可能是该数据类用于我的ROOMDatabase。这是我拖到用户界面的实体对象。也许这不是做事的正确方法。我不知道。
答案 0 :(得分:0)
懒惰是仅在使用变量时才对其进行初始化的地方,但是在将其声明为懒惰时需要一些代码。
例如
val mMoment by lazy { // Some code that generates this }
由于您的变量将在绑定中初始化,因此您应该这样做:
lateinit var mMoment: Moment
这意味着它将在以后初始化。如果尝试不初始化就使用它,则程序将引发异常。
或者,如果这可能永远不会受到约束,则应将其初始化为可为空的值:
var mMoment: Moment? = null