放入 onClickListener 时,实时数据观察器中的所有者参数是什么?
What is the owner parameter in the live data observer when put in an onClickListener?
单击按钮时,我想为我的 Room
数据创建一个 query
。我在 OnClickListener
中放入了我的数据 observable
。 observer
在 OnClickListener
方法之外工作正常,但在它内部,所有者参数不匹配。
Android Studio
要求 android.arch.lifecycle.LifeCycleOwner
但说得到 android.view.View.OnClickListener
.
showAllButton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
//The "this" parameter is underlined red
myViewModel.getAllDataVM().observe( this , new Observer<List<MyRoomEntity>>() {
@Override
public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
//myAdapter.setList( myRoomEntities );
Log.d("TAG", "OBSERVED");
if(myRoomEntities != null) {
for(MyRoomEntity item: myRoomEntities) {
Log.d("TAG ROOM ", "" + item.toString());
}
}
}
} );
}
} );//End Button
this
下划线为红色,即owner
参数。我试过使用 context
、application
等,但没有任何效果。也许 OnClickListener
中不可能有观察者,但我该怎么办?
这是一个很容易修复的常见错误。 this
关键字当前指的是 View.OnClickListener
,它 而不是 .observe()
的参数之一。因此,要解决此问题,您只需将 this
替换为:
getApplicationContext()
MyActivity.this
您的代码应该基本保持不变:
myViewModel.getAllDataVM().observe(getApplicationContext(), new Observer<List<MyRoomEntity>>() {
@Override
public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
//.....
单击按钮时,我想为我的 Room
数据创建一个 query
。我在 OnClickListener
中放入了我的数据 observable
。 observer
在 OnClickListener
方法之外工作正常,但在它内部,所有者参数不匹配。
Android Studio
要求 android.arch.lifecycle.LifeCycleOwner
但说得到 android.view.View.OnClickListener
.
showAllButton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
//The "this" parameter is underlined red
myViewModel.getAllDataVM().observe( this , new Observer<List<MyRoomEntity>>() {
@Override
public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
//myAdapter.setList( myRoomEntities );
Log.d("TAG", "OBSERVED");
if(myRoomEntities != null) {
for(MyRoomEntity item: myRoomEntities) {
Log.d("TAG ROOM ", "" + item.toString());
}
}
}
} );
}
} );//End Button
this
下划线为红色,即owner
参数。我试过使用 context
、application
等,但没有任何效果。也许 OnClickListener
中不可能有观察者,但我该怎么办?
这是一个很容易修复的常见错误。 this
关键字当前指的是 View.OnClickListener
,它 而不是 .observe()
的参数之一。因此,要解决此问题,您只需将 this
替换为:
getApplicationContext()
MyActivity.this
您的代码应该基本保持不变:
myViewModel.getAllDataVM().observe(getApplicationContext(), new Observer<List<MyRoomEntity>>() {
@Override
public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
//.....