Sayfa 3, Sayfalama kitaplığının önceki sürümlerinden önemli ölçüde farklıdır. Bu sürüm gelişmiş işlevler sağlar ve yaygın olarak kullanılan adresler Sayfa 2’yi kullanmayla ilgili zorluklar. Uygulamanızda zaten daha eski bir sürümüne geçiş yapabilirsiniz. Daha fazla bilgi için bu sayfayı okuyun Sayfa 3.
Sayfa 3, kullandığınız Sayfalandırma kitaplığının ilk sürümüyse hakkında daha fazla bilgi edinmek için Sayfaları yükleme ve görüntüleme verileri temel kullanım için ekleyebilirsiniz.
Sayfa 3'e geçmenin avantajları
Sayfa 3, daha önce bulunmayan aşağıdaki özellikleri içerir sürümleri için de ekleyebilirsiniz:
- Kotlin eş yordamları ve Akışı için birinci sınıf destek.
- RxJava
Singleveya GuavaListenableFuturekullanarak eşzamansız yükleme desteği ilkel maddelerdir. - Duyarlı kullanıcı arayüzü tasarımı için yerleşik yükleme durumu ve hata sinyalleri: tekrar deneyin ve yenileyin.
- İptal desteği ve basitleştirilmiş veri kaynağı arayüzü.
- Sunu katmanı, liste ayırıcılar, özel sayfada yapılan iyileştirmeler ile durum üstbilgilerini ve altbilgilerini yükleyebilirsiniz.
Uygulamanızı Sayfa 3'e taşıyın
Sayfa 3'e tam olarak geçmek için ana bileşenlerin üçünü de taşımanız gerekir Sayfa 2'den:
DataSourcesınıfPagedListPagedListAdapter
Ancak, Sayfalandırma 3 bileşenlerinin bazıları önceki sürümlerle geriye dönük olarak uyumludur
sürümlerinde yer alır. Özellikle,
Sayfalama'dan PagingSource API
3, proje yöneticisi olarak
LivePagedListBuilder
ve RxPagedListBuilder
eski sürümlerden birini seçin. Benzer şekilde, Pager API eski verileri de kullanabilir
DataSource nesne
asPagingSourceFactory() yöntemi. Bu, aşağıdaki niteliklere sahip olduğunuz anlamına gelir:
taşıma seçenekleri:
DataSourceveri türünüzüPagingSourcehizmetine taşıyabilirsiniz ancak Sayfalandırma uygulamasında değişiklik yapılmadı.PagedListvePagedListAdapteröğelerinizi taşıyabilirsiniz ancak daha eskiDataSourceAPI.- Uygulamanızı tamamen Sayfa 3.
Bu sayfadaki bölümlerde, her bir katmandaki Sayfalandırma bileşenlerinin nasıl taşınacağı açıklanmaktadır. en iyi yoludur.
DataSource sınıfları
Bu bölümde, eski bir Sayfalama'yı taşımak için gereken tüm değişiklikler açıklanmaktadır
PagingSource kullanımı.
PageKeyedDataSource, PositionalDataSource ve ItemKeyedDataSource
ve Sayfa 2'deki tüm sayfalar, Sayfa 3'te PagingSource API'de birleştirilir. İlgili içeriği oluşturmak için kullanılan
tüm eski API sınıflarındaki yükleme yöntemleri tek bir sayfada birleştirilir.
PagingSource konumunda load() yöntemi. Bu, çoğu durumda kod tekrarlarını
eski API sınıflarının uygulamalarındaki yükleme yöntemlerinin mantığı
genellikle aynıdır.
Tüm yükleme yöntemi parametreleri, Sayfa 3'te LoadParams ile değiştirilir
her yük türü için alt sınıflar içeren mühürlü sınıf. Gerekirse
load() yönteminizde yük türlerini birbirinden ayırt edebilmek için
LoadParams alt sınıfı geçildi: LoadParams.Refresh,
LoadParams.Prepend veya LoadParams.Append.
PagingSource öğesini uygulama hakkında daha fazla bilgi edinmek için Veri tanımlama bölümüne bakın.
kaynak değerleridir.
Tuşları yenile
PagingSource uygulamaları, yenilemelerin
ortaya koyun. Bu işlemi,
getRefreshKey()
state.anchorPosition doğru ilk anahtarı, en son
erişilen dizin.
Kotlin
// Replaces ItemKeyedDataSource. override fun getRefreshKey(state: PagingState<String, User>): String? { return state.anchorPosition?.let { anchorPosition -> state.getClosestItemToPosition(anchorPosition)?.id } } // Replacing PositionalDataSource. override fun getRefreshKey(state: PagingState<Int, User>): Int? { return state.anchorPosition }
Java
// Replaces ItemKeyedDataSource. @Nullable @Override String getRefreshKey(state: PagingState<String, User>) { Integer anchorPosition = state.anchorPosition; if (anchorPosition == null) { return null; } return state.getClosestItemToPosition(anchorPosition); } // Replaces PositionalDataSource. @Nullable @Override Integer getRefreshKey(state: PagingState<Integer, User>) { return state.anchorPosition; }
Java
// Replacing ItemKeyedDataSource. @Nullable @Override String getRefreshKey(state: PagingState<String, User>) { Integer anchorPosition = state.anchorPosition; if (anchorPosition == null) { return null; } return state.getClosestItemToPosition(anchorPosition); } // Replacing PositionalDataSource. @Nullable @Override Integer getRefreshKey(state: PagingState<Integer, User>) { return state.anchorPosition; }
Dönüşümleri listeleme
Sayfalandırma kitaplığının eski sürümlerinde, sayfalandırılmış verilerin dönüştürülmesi aşağıdaki yöntemlerde kullanılabilir:
DataSource.map()DataSource.mapByPage()DataSource.Factory.map()DataSource.Factory.mapByPage()
Sayfa 3'te, tüm dönüşümler PagingData üzerinde operatör olarak uygulanır. Eğer
sayfalı listenizi dönüştürmek için önceki listede bulunan yöntemlerden herhangi birini kullanıyorsanız
dönüştürme mantığınızı DataSource öğesinden
Yeni PagingSource öğenizi kullanarak Pager oluştururken PagingData.
Sayfa 3'ü kullanarak sayfalandırılmış verilere dönüşüm uygulama hakkında daha fazla bilgi edinmek için bkz. Veri akışlarını dönüştürün.
Sayfalı Liste
Bu bölümde, eski bir Sayfalama'yı taşımak için gereken tüm değişiklikler açıklanmaktadır
3. Sunum'da Pager ve PagingData kullanmak için uygulama.
PagedListBuilder sınıfları
PagingData, Sayfa 2'deki mevcut PagedList öğesinin yerini alır. Şuraya taşımak için:
PagingData, aşağıdakileri güncellemeniz gerekiyor:
- Sayfalandırma yapılandırması
PagedList.ConfigkonumundanPagingConfigkonumuna taşındı. LivePagedListBuilderveRxPagedListBuilderbirleştirildi tekPagersınıfı.Pager,.flowözelliğiyle gözlemlenebilir birFlow<PagingData>sunar. RxJava ve LiveData varyantları, uzantı özellikleri olarak da kullanılabilir. statik yöntemlerle Java'dan çağrılabilir ve Sırasıylapaging-rxjava*vepaging-runtimemodülleri.
Kotlin
val flow = Pager( // Configure how data is loaded by passing additional properties to // PagingConfig, such as prefetchDistance. PagingConfig(pageSize = 20) ) { ExamplePagingSource(backend, query) }.flow .cachedIn(viewModelScope)
Java
// CoroutineScope helper provided by the lifecycle-viewmodel-ktx artifact. CoroutineScope viewModelScope = ViewModelKt.getViewModelScope(viewModel); Pager<Integer, User> pager = Pager<>( new PagingConfig(/* pageSize = */ 20), () -> ExamplePagingSource(backend, query)); Flowable<PagingData<User>> flowable = PagingRx.getFlowable(pager); PagingRx.cachedIn(flowable, viewModelScope);
Java
// CoroutineScope helper provided by the lifecycle-viewmodel-ktx artifact. CoroutineScope viewModelScope = ViewModelKt.getViewModelScope(viewModel); Pager<Integer, User> pager = Pager<>( new PagingConfig(/* pageSize = */ 20), () -> ExamplePagingSource(backend, query)); PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), viewModelScope);
Şu komutu kullanarak PagingData nesnenin reaktif akışını ayarlama hakkında daha fazla bilgi edinmek için:
Sayfa 3, bkz.
PagingData.
Katmanlı kaynaklar için BoundaryCallback
Sayfa 3'te,
RemoteMediator şunları değiştirir:
Ağdan ve veritabanından sayfa oluşturma için işleyici olarak PagedList.BoundaryCallback.
Şu sayfadaki ağ ve veritabanından sayfada RemoteMediator kullanma hakkında daha fazla bilgi:
3. sayfa, bkz. Android Çağrısı
codelab'i tıklayın.
Sayfa Listesi Adaptörü
Bu bölümde, eski bir Sayfalama'yı taşımak için gereken tüm değişiklikler açıklanmaktadır
PagingDataAdapter veya AsyncPagingDataDiffer sınıflarını kullanmak için uygulama
Sayfa 3'ten.
3. sayfa, yeni PagingData reaktifini işlemek için PagingDataAdapter sağlar
akışlar. Aksi takdirde PagedListAdapter ve PagingDataAdapter aynı olacaktır
kullanır. PagedListAdapter ürününden PagingDataAdapter aboneliğine taşımak için şunu değiştirin:
PagingDataAdapter kapsamını genişletmek için PagedListAdapter uygulamanız.
PagingDataAdapter hakkında daha fazla bilgi edinmek için bkz. RecyclerView tanımlama
bağdaştırıcıyı kullanın.
Eş ZamansızSayfalıListeDiffer
Şu andaRecyclerView.Adapter
AsyncPagedListDiffer,
Bunun yerine Sayfa 3'te AsyncPagingDataDiffer sağlanmıştır:
Kotlin
AsyncPagingDataDiffer(diffCallback, listUpdateCallback)
Java
new AsyncPagingDataDiffer(diffCallback, listUpdateCallback);
Java
new AsyncPagingDataDiffer(diffCallback, listUpdateCallback);
Ek kaynaklar
Sayfalama kitaplığı hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara bakın:
Codelab'ler
Örnekler
- Android Mimari Bileşenleri Sayfalandırması örnek
- Veritabanı ve Ağ ile Android Mimari Bileşenleri Sayfalandırması örnek
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Sayfalandırılmış verileri yükleme ve görüntüleme
- Sayfalara ayrılmış verileri toplama
- Ağ ve veritabanındaki sayfa