gpt4 book ai didi

java - 如何使用 viewModel 中的观察者方法解决 "anonymous class derived from observer"错误

转载 作者:行者123 更新时间:2023-12-02 10:20:08 36 4
gpt4 key购买 nike

我已经在 MainActivity() 中成功使用了观察者方法看起来像这样:

public void inputNameTest(String inputName) {
myViewModel.inputNameTesting(inputName).observe( this, new Observer<List<MyRoomEntity>>() {
@Override
public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
//Sets data in RecyclerView
myAdapter.setList( myRoomEntities );
}
} );
}

这会将用户输入数据设置为 Room查询并显示 RecyclerView 中的查询。我想将该功能移至 ViewModel但是,要保留 View避免杂乱。

ViewModel我在 new Observer<List<MyRoomEntity>>() 上看到红色下划线上面写着anonymous class must either be declared abstract or implement abstract method

如果我更改Observernew android.arch.lifecycle.Observer<List<MyRoomEntity>>() (如Android-Studio建议)红色下划线消失。

我还需要传递owner参数而不是 this 。我通过传递this来管理这个来自MainActivity()

myViewModel.setOwner( this );

给我的ViewModel

public void setOwner(LifecycleOwner owner) {
this.mOwner = owner;
}

当我完成后,我的Observer我的方法ViewModel看起来像这样:

public void getUserInputName(String inputName) {
repository.getUserInputName(inputName).observe( mOwner, new android.arch.lifecycle.Observer<List<MyRoomEntity>>() {
@Override
public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {

Log.d("TAG", "OBSERVED INPUT NAME");
if(myRoomEntities != null) {
for(MyRoomEntity item: myRoomEntities) {
Log.d("TAG ROOM ", "Input Name: " + item.toString());
}
}
myAdapter.setList( myRoomEntities );

}
} );
}

没有产生错误,但由于某种原因,RecyclerView 中没有显示任何内容。 。我确实得到了正确的Log Observer 的输出方法:

Input Name: MyRoomEntity{id=2, name='Joe', date='1/3/2015', from='12.30', until='13:00'}

所以,如果我在 EditText 中写下“Joe”框并按下按钮, RecyclerView 中没有显示任何内容但我确实得到了正确的 Log 。如果我保留Observer MainActivity()中的方法我得到了正确的 LogRecyclerView输出。

不知道出了什么问题,但一定是我对 Observer 所做的两项更改所致。方法。

最佳答案

通过这个实现,你将所有 google 的工作都扔进了垃圾箱,因为你所做的就是向 ViewModel 类提供 MainActivity 引用,而使用 MVVM 的要点是避免这个问题,以确保安全,以防你的 Activity 或 fragment 被破坏并被破坏。能够在屏幕旋转的情况下保存数据状态。因此,不要将观察者代码移到 ViewModel 类中,这样不会“弄乱” Activity 。

关于java - 如何使用 viewModel 中的观察者方法解决 "anonymous class derived from observer"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54402739/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com