Dinamik listeleri özelleştirme Android Jetpack'in bir parçasıdır.
RecyclerView
nesnelerini ihtiyaçlarınıza göre özelleştirebilirsiniz. RecyclerView ile dinamik listeler oluşturma bölümünde açıklanan standart sınıflar, çoğu geliştiricinin ihtiyaç duyduğu tüm işlevleri sağlar. Çoğu durumda, yalnızca her görünüm tutucu için görünümü tasarlamanız ve bu görünümleri uygun verilerle güncelleyecek kodu yazmanız yeterlidir. Ancak uygulamanızın özel gereksinimleri varsa standart davranışı çeşitli şekillerde değiştirebilirsiniz.
Bu belgede, olası özelleştirmelerden bazıları açıklanmaktadır.
Düzeni değiştirme
RecyclerView, ekrandaki öğeleri 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 görünümü yeniden kullanmak veya geri dönüştürmek için düzen yöneticisi, adaptörden görünümün içeriğini veri kümesindeki farklı bir öğeyle değiştirmesini isteyebilir. Görünümlerin bu şekilde geri dönüştürülmesi, gereksiz görünümler oluşturulmasını veya pahalı aramalar yapılmasını önleyerek performansı artırır.findViewById() 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.LinearLayoutManagerileRecyclerViewkullanmak,ListViewdüzeni gibi işlevler sağlar.GridLayoutManager: öğeleri dama tahtasındaki kareler gibi iki boyutlu bir ızgarada düzenler.GridLayoutManagerileRecyclerViewkullanmak,GridViewdüzeni gibi işlevler sağlar.StaggeredGridLayoutManager: Öğeleri iki boyutlu bir ızgarada düzenler. Her sütun, bir öncekinden biraz kaydırılır. Bu, Amerikan bayrağındaki yıldızlara benzer.
Bu düzen yöneticileri ihtiyaçlarınıza uygun değilse RecyclerView.LayoutManager soyut sınıfını genişleterek kendi düzen yöneticinizi oluşturabilirsiniz.
Öğe animasyonları ekleme
Bir öğe değiştiğinde RecyclerView, görünümünü değiştirmek için bir animatör kullanır. Bu animatör, soyut RecyclerView.ItemAnimator sınıfını genişleten bir nesnedir. Varsayılan olarak RecyclerView, 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şi kullanarak RecyclerView listesindeki öğeleri seçmesine olanak tanır. Bu sayede, seçili bir öğenin görsel sunumu üzerinde kontrol sahibi olabilirsiniz. Ayrıca, seçim davranışını kontrol eden politikalar (ör. hangi öğelerin seçilebileceği ve kaç öğenin seçilebileceği) üzerinde de kontrol sahibi olabilirsiniz.
Bir RecyclerView örneğine seçim desteği eklemek için aşağıdaki adımları uygulayın:
- Hangi seçim anahtarı türünü kullanacağınızı belirleyin, ardından bir
ItemKeyProvideroluşturun.Seçili öğeleri tanımlamak için kullanabileceğiniz üç anahtar türü vardır:
Parcelableve alt sınıfları (ör.Uri)StringLong
Seçim anahtarı türleri hakkında ayrıntılı bilgi için
SelectionTracker.Builderbaşlıklı makaleyi inceleyin. ItemDetailsLookupuygulayın.- Kullanıcının seçip seçmediğini yansıtmak için
RecyclerViewiçindekiViewnesnelerini güncelleyin.Seçim kitaplığı, seçilen öğeler için varsayılan bir görsel dekorasyon sağlamaz.
onBindViewHolder()özelliğini uygularken bu değeri sağlayın. Aşağıdaki yaklaşımı öneririz:onBindViewHolder()dilinde, öğenin seçili olup olmamasına bağlı olarakViewnesnesindetrueveyafalseilesetActivated()(değilsetSelected()) işlevini çağırın.- Görünümün stilini, etkinleştirilmiş durumu gösterecek şekilde güncelleyin. Stili yapılandırmak için renk durumu listesi kaynağı kullanmanızı öneririz.
- Kullanıcıya seçim üzerinde işlem yapabileceği araçlar sunmak için
ActionModekullanın. - Yorumlanan ikincil işlemleri gerçekleştirme
SelectionTracker.Builderile her şeyi bir araya getirin.- Seçimi etkinlik yaşam döngüsü etkinliklerine dahil edin.
ItemDetailsLookup, seçim kitaplığının belirli bir MotionEvent için RecyclerView öğeleriyle ilgili bilgilere erişmesine olanak tanır.
Bu, bir RecyclerView.ViewHolder örneği tarafından yedeklenen veya bu örnekten çıkarılan ItemDetails örnekleri için etkili bir fabrikadır.
Seçim değiştiğinde bildirim almak için bir SelectionTracker.SelectionObserver kaydedin. Bir seçim ilk oluşturulduğunda, bunu kullanıcıya sunmak ve seçime özel işlemler sağlamak için ActionMode başlatın. Örneğin, ActionMode çubuğuna bir silme düğmesi ekleyebilir ve seçimi temizlemek için çubuktaki geri okunu bağlayabilirsiniz. Seçim boşaldığında (kullanıcı seçimi son kez temizlerse) işlem modunu sonlandırın.
Etkinlik işleme ardışık düzeninin sonunda kitaplık, kullanıcının bir öğeye dokunarak etkinleştirmeye çalıştığını veya bir öğeyi ya da 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.
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();
Bir SelectionTracker örneği oluşturmak için uygulamanızın, RecyclerView'yi ilk kullanıma hazırlamak için kullandığınız RecyclerView.Adapter değerini SelectionTracker.Builder değerine sağlaması gerekir. Bu nedenle, SelectionTracker örneğini oluşturduktan sonra RecyclerView.Adapter örneğinize ekleyin. Aksi takdirde, bir öğenin seçili durumunu onBindViewHolder() yönteminden kontrol edemezsiniz.
Seçim durumunu etkinlik yaşam döngüsü olayları boyunca korumak için uygulamanızın, etkinliğin onSaveInstanceState() ve onRestoreInstanceState() yöntemlerinden sırasıyla seçim izleyicinin onSaveInstanceState() ve onRestoreInstanceState() yöntemlerini çağırması gerekir. Uygulamanızın, SelectionTracker.Builder oluşturucuya benzersiz bir seçim kimliği de sağlaması gerekir. Bir etkinlik veya parçada birden fazla farklı, seçilebilir liste bulunabileceğinden ve bunların tümünün kaydedilmiş durumlarında kalması gerektiğinden bu kimlik gereklidir.
Ek kaynaklar
Daha fazla bilgi için aşağıdaki referanslara bakın.
RecyclerViewkullanan Sunflower demo uygulaması.- Kaydırılabilir liste görüntülemek için RecyclerView kullanma codelab'i
- Android Kotlin Temel Bilgileri: RecyclerView ile ilgili temel bilgiler codelab'i