Обновить список MutableLiveData

У меня есть переменная класса 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();
    }
}


person Remzo    schedule 24.03.2020    source источник


Ответы (1)


Я думаю, вы можете использовать репозиторий для архитектуры mvvm. Вы можете обратиться по адресу здесь

person Dhrumil Shah    schedule 12.04.2020