Как реализовать SwipeRefreshLayout с новой библиотекой подкачки - PullRequest
0 голосов
/ 28 апреля 2018

Я получил действие, которое показывает список элементов пользователю и использует библиотеку подкачки. Моя проблема в том, что я не могу перезагрузить список, когда пользователь проводит пальцем по экрану, чтобы он снова получал данные с сервера.

Вот моя фабрика источников данных:

public class CouponListDataSourceFactory extends DataSource.Factory {
    private CouponListDataSource dataSource;

    public CouponListDataSourceFactory(CouponRepository repository, String token, String vendorId) {
        dataSource = new CouponListDataSource(repository, token, vendorId);
    }

    @Override
    public DataSource create() {
        return dataSource;
    }
}

А вот как я создаю PagedList

PagedList.Config config = new PagedList.Config.Builder()
                .setInitialLoadSizeHint(15)
                .setPageSize(10)
                .build();
LiveData<PagedList<Coupon>> couponsLiveData = new LivePagedListBuilder<>(dataSourceFactory, config).build();

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Добавление метода в класс ViewModel

 public void refresh() {

    itemDataSourceFactory.getItemLiveDataSource().getValue().invalidate();
}

и из действия / фрагмента вы можете использовать

 swipeRefreshLayout.setOnRefreshListener(() -> yourviewModel.refresh());

Скрыть макет обновления при загрузке reyclerView

yourViewModel.itemPagedList.observe(this, allProposalModel -> {


        mAdapter.submitList(model);
        swipeRefreshLayout.setRefreshing(false); //here..


    });
0 голосов
/ 14 августа 2018

После вызова mDataSource.invalidate () метод mDataSource будет признан недействительным, а новый экземпляр DataSource будет создан с помощью метода DataSource.Factory.create (), поэтому важно, чтобы предоставил новый DataSource () каждый раз внутри метода DataSource.Factory.create () не предоставляйте один и тот же экземпляр DataSource каждый раз .

mDataSource.invalidate () не работает, , потому что после аннулирования CouponListDataSourceFactory предоставляет тот же, уже недействительный экземпляр DataSource.

После модификации CouponListDataSourceFactory будет выглядеть так, как показано ниже в примере, и вызов метода mCouponListDataSourceFactory.dataSource.invalidate () сделает обновление , или вместо сохранения экземпляра dataSource внутри фабрика, мы можем вызвать метод invalidate для LiveData > .getValue (). getDataSource (). invalidate ()

public class CouponListDataSourceFactory extends DataSource.Factory {

private CouponListDataSource dataSource;

private CouponRepository repository;
private String token;
private String vendorId;

public CouponListDataSourceFactory(CouponRepository repository, String token, String vendorId) {
    this.repository = repository;
    this.token = token;
    this.vendorId = vendorId;
}

@Override
public DataSource create() {
    dataSource = new CouponListDataSource(repository, token, vendorId);
    return dataSource;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...