PagedList делает недействительным DataSource - PullRequest
0 голосов
/ 15 мая 2019

Вот метод обновления PageList:

public void refresh() {
        RecyclerView recyclerView = findViewById(R.id.list);

        ItemViewModel itemViewModel = ViewModelProviders.of(MainActivity.this)
                .get(ItemViewModel.class);
        final ItemAdapter adapter = new ItemAdapter(MainActivity.this);

        itemViewModel.itemPagedList.observe(MainActivity.this,
                new Observer<PagedList<Item>>() {
                    @Override
                    public void onChanged(@Nullable PagedList<Item> items) {

                        adapter.submitList(items);

                    }
                });

        recyclerView.setAdapter(adapter);
    }

Но он не предоставляет новую версию данных, поэтому мне нужно использовать от invalidate() до ItemDataSource. Как я могу это сделать?

Вот ItemDataSource:

public class ItemDataSource extends PageKeyedDataSource<Integer, Item> {
    @Override
    public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull final LoadInitialCallback<Integer, Item> callback) {

        loadData(Util.getMinAge, Util.getMaxAge);
    }
    // and so on in loadBefore and loadAfter methods
}

1 Ответ

0 голосов
/ 15 мая 2019

Я решаю проблему, добавив геттер для источника данных:

public static ItemDataSource getItemDataSource() {
        return itemDataSource;
    }

    private static ItemDataSource itemDataSource;

    @Override
    public DataSource<Integer, Item> create() {
        itemDataSource = new ItemDataSource();

        itemLiveDataSource.postValue(itemDataSource);

        return itemDataSource;
    }

Затем я добавил эту строку перед обновлением:

        ItemDataSourceFactory.getItemDataSource().invalidate();

Это помогло мне получить новую версию данных для PagedList.

...