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
Single
veya GuavaListenableFuture
kullanarak 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:
DataSource
sınıfPagedList
PagedListAdapter
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:
DataSource
veri türünüzüPagingSource
hizmetine taşıyabilirsiniz ancak Sayfalandırma uygulamasında değişiklik yapılmadı.PagedList
vePagedListAdapter
öğelerinizi taşıyabilirsiniz ancak daha eskiDataSource
API.- 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.Config
konumundanPagingConfig
konumuna taşındı. LivePagedListBuilder
veRxPagedListBuilder
birleştirildi tekPager
sı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-runtime
modü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