Sayfalı listeleri göster

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 listele PagedListAdapter. 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

ziyaret edin. ziyaret edin.