Dinamik bir listeyi özelleştirme   Android Jetpack'in bir parçasıdır.

Oluşturma yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Compose'da düzenlerle nasıl çalışacağınızı öğrenin.

RecyclerView nesnelerini özel ihtiyaçlarınızı karşılayacak şekilde özelleştirebilirsiniz. RecyclerView ile dinamik listeler oluşturma başlıklı makalede açıklanan standart sınıflar, çoğu geliştiricinin ihtiyaç duyduğu tüm işlevleri sağlar. Çoğu durumda, her bir görünüm tutucusu için görünümü tasarlamanız ve bu görünümleri uygun verilerle güncellemek için kodu yazmanız yeterlidir. Ancak uygulamanızda belirli koşullar varsa standart davranışı çeşitli şekillerde değiştirebilirsiniz. Bu dokümanda, olası özelleştirmelerden bazıları açıklanmaktadır.

Düzeni değiştirme

RecyclerView, öğeleri ekranda konumlandırmak ve artık kullanıcı tarafından görülemeyen öğe görünümlerinin ne zaman yeniden kullanılacağını belirlemek için bir düzen yöneticisi kullanır. Bir düzen yöneticisi, bir görünümü yeniden kullanmak veya geri dönüştürmek için bağdaştırıcının görünümün içeriğini veri kümesinden farklı bir öğeyle değiştirmesini isteyebilir. Görüntülemelerin bu şekilde geri dönüştürülmesi, gereksiz görüntülemelerin oluşturulmasını veya pahalı findViewById() aramalarının yapılmasını önleyerek performansı artırır. Android Destek Kitaplığı, her biri birçok özelleştirme seçeneği sunan üç standart düzen yöneticisi içerir:

  • LinearLayoutManager: Öğeleri tek boyutlu bir listede düzenler. LinearLayoutManager ile RecyclerView kullanmak, ListView düzeni gibi işlevler sağlar.
  • GridLayoutManager: Öğeleri, dama tahtasındaki kareler gibi iki boyutlu bir ızgara üzerinde düzenler. GridLayoutManager ile RecyclerView kullanmak, GridView düzeni gibi işlevler sunar.
  • StaggeredGridLayoutManager: Öğeleri iki boyutlu bir ızgara şeklinde düzenler. Her sütun, bir Amerikan bayrağındaki yıldızlar gibi öncekinden biraz kaydırılır.

Bu düzen yöneticileri ihtiyaçlarınıza uymuyorsa RecyclerView.LayoutManager soyut sınıfını genişleterek kendi düzeninizi oluşturabilirsiniz.

Öğe animasyonları ekleme

Bir öğe değiştiğinde RecyclerView, görünümünü değiştirmek için bir animasyon aracısı kullanır. Bu animatör, soyut RecyclerView.ItemAnimator sınıfını genişleten bir nesnedir. RecyclerView varsayılan olarak animasyonu sağlamak için DefaultItemAnimator kullanır. Özel animasyonlar sağlamak istiyorsanız RecyclerView.ItemAnimator sınıfını genişleterek kendi animatör nesnenizi tanımlayabilirsiniz.

Liste öğesi seçimini etkinleştirme

recyclerview-selection kitaplığı, kullanıcıların dokunma veya fare girişini kullanarak RecyclerView listesindeki öğeleri seçmesine olanak tanır. Bu sayede, seçili öğenin görsel sunumu üzerindeki kontrolünüzü sürdürebilirsiniz. Ayrıca, hangi öğelerin seçilmeye uygun olduğu ve kaç öğenin seçilebileceği gibi seçim davranışını kontrol eden politikalar üzerinde de kontrol sahibi olabilirsiniz.

RecyclerView örneğine seçim desteği eklemek için aşağıdaki adımları uygulayın:

  1. Kullanılacak seçim anahtarı türünü belirleyin, ardından bir ItemKeyProvider oluşturun.

    Seçilen öğeleri tanımlamak için kullanabileceğiniz üç anahtar türü vardır:

    Seçim anahtarı türleri hakkında ayrıntılı bilgi için SelectionTracker.Builder bölümüne bakın.

  2. ItemDetailsLookup'ü uygulayın.
  3. ItemDetailsLookup, seçim kitaplığının, MotionEvent belirtilen RecyclerView öğe hakkındaki bilgilere erişmesine izin verir. Bu, bir RecyclerView.ViewHolder örneği tarafından yedeklenen veya bu örnekten ayıklanan ItemDetails örnekleri için etkili bir fabrikadır.

  4. RecyclerView içindeki öğe View nesnelerini, kullanıcının bunları seçip seçmediğini yansıtacak şekilde güncelleyin.

    Seçim kitaplığı, seçili öğeler için varsayılan görsel süsleme sağlamaz. onBindViewHolder() uygularken bunu belirtin. Aşağıdaki yaklaşımı öneririz:

    • onBindViewHolder() içinde, öğenin seçili olup olmadığına bağlı olarak View nesnesinde true veya false ile setActivated()'ü (setSelected() değil) çağırın.
    • Görünümün stilini, etkinleştirilmiş durumu temsil edecek şekilde güncelleyin. Stili yapılandırmak için renk durumu listesi kaynağı kullanmanızı öneririz.
  5. Kullanıcıya seçim üzerinde işlem gerçekleştirme araçları sağlamak için ActionMode öğesini kullanın.
  6. Bir seçim değiştiğinde bildirim almak için SelectionTracker.SelectionObserver kaydedin. Bir seçim ilk oluşturulduğunda, bunu kullanıcıya sunmak ve seçime özel işlemler sunmak için ActionMode işlemini başlatın. Örneğin, ActionMode çubuğuna bir silme düğmesi ekleyebilir ve seçimi temizlemek için çubuğun üzerindeki geri oku bağlayabilirsiniz. Seçim boş hale geldiğinde (kullanıcı, seçimi en son kez silerse) işlem modunu sonlandırır.

  7. Yorumlanmış ikincil işlemleri gerçekleştirme.
  8. Kitaplık, etkinlik işleme ardışık düzeninin sonunda kullanıcının bir öğeyi dokunarak veya dokunarak etkinleştirmeye çalıştığını ya da bir öğeyi veya seçili öğe grubunu sürüklemeye çalıştığını belirleyebilir. Uygun dinleyiciyi kaydederek bu yorumlara tepki verin. Daha fazla bilgi için SelectionTracker.Builder başlıklı makaleyi inceleyin.

  9. SelectionTracker.Builder ile her şeyi bir araya getirin.
  10. Aşağıdaki örnekte bu parçaların nasıl bir araya getirileceği gösterilmektedir:

    Kotlin

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    Java

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    SelectionTracker örneği derlemek için uygulamanızın, RecyclerView öğesini SelectionTracker.Builder uygulamasına başlatırken kullandığınız RecyclerView.Adapter öğesini sağlaması gerekir. Bu nedenle, SelectionTracker örneğini oluşturduktan sonra RecyclerView.Adapter'inize ekleyin. Aksi takdirde, onBindViewHolder() yönteminden bir öğenin seçili durumunu kontrol edemezsiniz.

  11. Seçimi etkinlik yaşam döngüsü etkinliklerine dahil edin.
  12. Seçim durumunu etkinlik yaşam döngüsü etkinlikleri boyunca korumak için uygulamanızın, sırasıyla etkinlik onSaveInstanceState() ve onRestoreInstanceState() yöntemlerini kullanarak seçim izleyicinin onSaveInstanceState() ve onRestoreInstanceState() yöntemlerini çağırması gerekir. Uygulamanız, SelectionTracker.Builder yapıcısına benzersiz bir seçim kimliği de sağlamalıdır. Bir etkinlik veya parçanın, her birinin kayıtlı durumunda saklanması gereken birden fazla ayrı ve seçilebilir liste olabileceği için bu kimlik gereklidir.

Ek kaynaklar

Daha fazla bilgi için aşağıdaki referanslara bakın.