У меня есть переменная класса MyViewModel
MutableLiveData items
, в которой хранится список класса Item
. Также есть функция fetchData()
, которая получает данные из webService с помощью библиотеки Retrofit, и функция checkStatus()
, которая для каждого элемента в списке должна выполнять проверку, когда пользователь нажимает кнопку.
Мой вопрос: как правильно обновить элемент в списке, хранящемся в объекте MutableLiveData? Приемлемо ли мое решение или вы знаете какое-нибудь лучшее решение?
Item.java
public class Item {
int id;
String status;
}
MyViewModel.java
public class MyViewModel extends ViewModel {
private MutableLiveData<List<Item>> items = new MutableLiveData<>();
//... rest of variables
public void fetchData() {
// get list from webService
webService.fetchItems()
.subscribeOn(Schedulers.io())
.observceOn(AndroidSchedulers.mainThread())
.observe(result -> items.postValue(result.data));
}
public void checkStatus() {
// for every item on list perform check
List<Item> itemList = items.getValue();
for(Item item : itemList) {
webService.check(item.id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.observe(result -> {
item.status = result.status;
itemList.set(itemList.indexOf(item), item);
items.postValue(items.getValue());
});
}
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerViewAdapter viewAdapter;
private MyViewModel viewModel;
// rest of standard code...
// called somewhere in onCreate method
private void subscribeObservers() {
viewModel.observeItems().observe(this, items -> {
if(items != null) {
viewAdapter.setItems(items);
}
});
}
// user check click button listener
public void onClick(View view) {
viewModel.checkStatus();
}
}