Bu kılavuz, Sayfalama Kitaplığı genel bakış ve bu bilgileri nasıl uygulayacağınızı uygulamanızın kullanıcı arayüzünde kullanıcılara bilgi listeleri sunar. veya bilgi değişiklikleri olabilir.
Kullanıcı arayüzünü görünüm modelinize bağlama
Şuna bir örnek bağlayabilirsiniz:
LiveData<PagedList>
itibarıyla bir
PagedListAdapter
, gösterildiği gibi
aşağıdaki kod snippet'inde:
Kotlin
class ConcertActivity : AppCompatActivity() { private val adapter = ConcertAdapter() // Use the 'by viewModels()' Kotlin property delegate // from the activity-ktx artifact private val viewModel: ConcertViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); viewModel.concerts.observe(this, Observer { adapter.submitList(it) }) } }
Java
public class ConcertActivity extends AppCompatActivity { private ConcertAdapter adapter = new ConcertAdapter(); private ConcertViewModel viewModel; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(this).get(ConcertViewModel.class); viewModel.concertList.observe(this, adapter::submitList); } }
Veri kaynakları yeni örnekler sunabildiği için
PagedList
, etkinlik
bağdaştırıcıya yüklemenizi sağlar. İlgili içeriği oluşturmak için kullanılan
PagedListAdapter
uygulama güncellemelerin nasıl hesaplandığını tanımlar ve bunları otomatik olarak
sayfalama ve liste farklılaştırma. Bu nedenle,
ViewHolder
yalnızca sağlanan belirli bir öğeye bağlanması gerekiyor:
Kotlin
class ConcertAdapter() : PagedListAdapter<Concert, ConcertViewHolder>(DIFF_CALLBACK) { override fun onBindViewHolder(holder: ConcertViewHolder, position: Int) { val concert: Concert? = getItem(position) // Note that "concert" is a placeholder if it's null. holder.bindTo(concert) } companion object { private val DIFF_CALLBACK = ... // See Implement the diffing callback section. } }
Java
public class ConcertAdapter extends PagedListAdapter<Concert, ConcertViewHolder> { protected ConcertAdapter() { super(DIFF_CALLBACK); } @Override public void onBindViewHolder(@NonNull ConcertViewHolder holder, int position) { Concert concert = getItem(position); // Note that "concert" can be null if it's a placeholder. holder.bindTo(concert); } private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK = ... // See Implement the diffing callback section. }
PagedListAdapter
sayfa yükleme etkinliklerini bir
PagedList.Callback
nesnesini tanımlayın. Kullanıcı sayfayı kaydırdıkça PagedListAdapter
şunu çağırır:
PagedList.loadAround()
temel ipuçları sunmak için
Şu tarih itibarıyla PagedList
:
web sitesinden getirmesi gereken öğeleri
DataSource
Karşılaştırılan geri çağırmayı uygulama
Aşağıdaki örnekte, aşağıdaki örnekte gösterildiği gibi,
areContentsTheSame()
Böylece, ilgili nesne alanlarını karşılaştırır:
Kotlin
private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Concert>() { // The ID property identifies when items are the same. override fun areItemsTheSame(oldItem: Concert, newItem: Concert) = oldItem.id == newItem.id // If you use the "==" operator, make sure that the object implements // .equals(). Alternatively, write custom data comparison logic here. override fun areContentsTheSame( oldItem: Concert, newItem: Concert) = oldItem == newItem }
Java
private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK = new DiffUtil.ItemCallback<Concert>() { @Override public boolean areItemsTheSame(Concert oldItem, Concert newItem) { // The ID property identifies when items are the same. return oldItem.getId() == newItem.getId(); } @Override public boolean areContentsTheSame(Concert oldItem, Concert newItem) { // Don't use the "==" operator here. Either implement and use .equals(), // or write custom data comparison logic here. return oldItem.equals(newItem); } };
Adaptörünüz sizin ürün karşılaştırma tanımınızı içerdiğinden, bağdaştırıcı
yeni bir PagedList
nesnesi olduğunda, bu öğelerde yapılan değişiklikleri otomatik olarak algılar
yüklendi. Sonuç olarak bağdaştırıcı,
RecyclerView
nesne algılandı.
Farklı bir adaptör türü kullanarak fark
Şu kaynaktan devralmamayı seçerseniz:
PagedListAdapter
- gibi
kendi bağdaştırıcısını sağlayan bir kitaplık kullanıyorsanız
Doğrudan bir
AsyncPagedListDiffer
nesnesini tanımlayın.
Kullanıcı arayüzünüzde yer tutucular sağlayın
Uygulamanız tamamlanmadan önce kullanıcı arayüzünüzün bir liste görüntülemesini istediğiniz durumlarda
kullanıcılarınıza yer tutucu liste öğeleri gösterebilirsiniz. İlgili içeriği oluşturmak için kullanılan
PagedList
, bu destek kaydını şu şekilde işler:
Veriler yüklenene kadar liste öğesi verileri null
olarak sunuluyor.
Yer tutucular aşağıdaki avantajlara sahiptir:
- Kaydırma çubukları için destek:
PagedList
, öğeleri listelePagedListAdapter
. Bu bilgisi, adaptörün resmin tüm boyutlarını ileten bir kaydırma çubuğu liste dışı bırakmalısınız. Yeni sayfalar yüklenirken, listeniz hızlı bir şekilde yüklenmediğinden boyutu değişmez. - Yükleme döner simgesi gerekmez: Liste boyutu zaten bilindiği için Kullanıcıları daha fazla öğenin yüklendiği konusunda uyarmanız gerekmez. Yer tutucular kendileri bu bilgiyi iletir.
Yine de yer tutucular için destek eklemeden önce aşağıdakileri koruyun göz önünde bulundurmanız gerekir:
- Sayılabilir bir veri kümesi gerektirir:
Odadan
DataSource
kalıcılık kitaplığı etkili şekilde sayabilir. hakkında bilgi edindiniz. Özel bir yerel depolama çözümü veya yalnızca ağ veri mimarisi, ancak kaç ürünün tam olarak hazır olduğunu belirlemek pahalı, veri kümenizi oluşturur. - Bağdaştırıcının yüklenmemiş öğeleri hesaba katmasını gerektirir: Bağdaştırıcı veya
listeyi enflasyona hazırlarken kullandığınız sunum mekanizmasının
boş liste öğelerini işle. Örneğin, verileri bir
ViewHolder
yüklenmemiş verileri temsil eden varsayılan değerler sağlamanız gerekir. - Aynı boyutlu öğe görünümleri gerektirir: Liste öğesi boyutları (ör. sosyal ağ güncellemeleri, öğeler arasında geçişler) pek işe yaramaz. Bu durumda yer tutucuların devre dışı bırakılmasını önemle tavsiye ederiz.
Geri bildirim gönder
Aşağıdaki kaynakları kullanarak geri bildiriminizi ve düşüncelerinizi bizimle paylaşın:
- Sorun izleyici
- Hataları düzeltebilmemiz için sorunları bildirin.
Ek kaynaklar
Sayfalandırma Kitaplığı hakkında daha fazla bilgi edinmek için şu sayfaya bakın: inceleyebilirsiniz.
Örnekler
Codelab'ler
Videolar
- Android Jetpack: RecyclerView ve Paging ile sonsuz listeleri yönetin (Google I/O 2018)
- Android Jetpack: Çağrı
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Sayfa 2 kitaplığına genel bakış
- Sayfa 3'e geçme
- Sayfalara ayrılmış verileri toplama