Я успешно использовал метод наблюдателя в 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
Если я изменю Observer
на new 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
и нажму кнопку, в * ничего не отображается1044 * но я получаю правильный Log
.Если я оставлю метод Observer
в MainActivity()
, я получу правильные значения Log
и RecyclerView
.
Не знаю, что не так, но это должно быть что-то с двумя изменениями, которые я сделал с помощью метода Observer
.