Dinamik bir listeyi özelleştirme Android Jetpack'in bir parçasıdır.
RecyclerView
Öğeleri ihtiyaçlarınıza göre ö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 belgede, 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
ileRecyclerView
kullanmak,ListView
düzeni gibi işlevler sunar.GridLayoutManager
: Öğeleri, dama tahtasındaki kareler gibi iki boyutlu bir ızgara üzerinde düzenler.GridLayoutManager
ileRecyclerView
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ızı karşılamıyorsa RecyclerView.LayoutManager
soyut sınıfı 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 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 dokunmatik veya fare girişini kullanarak RecyclerView
listesindeki öğeleri seçmesine olanak tanır. Bu sayede, seçili bir öğenin görsel sunumu üzerinde kontrol sahibi olabilirsiniz. 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.
Bir RecyclerView
örneğine seçim desteği eklemek için aşağıdaki adımları uygulayın:
- 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:
Parcelable
ve alt sınıfları (ör.Uri
)String
Long
Seçim anahtarı türleri hakkında ayrıntılı bilgi için
SelectionTracker.Builder
bölümüne bakın. ItemDetailsLookup
'ü uygulayın.RecyclerView
içindekiView
öğelerini, kullanıcının öğeleri 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 sağlayın. Aşağıdaki yaklaşımı öneririz:onBindViewHolder()
içinde, öğenin seçili olup olmadığına bağlı olarakView
nesnesindetrue
veyafalse
ilesetActivated()
'i (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.
- Kullanıcıya seçim üzerinde işlem gerçekleştirme araçları sağlamak için
ActionMode
öğesini kullanın. - Yorumlanmış ikincil işlemleri gerçekleştirme.
SelectionTracker.Builder
ile her şeyi bir araya getirin.- Seçimi etkinlik yaşam döngüsü etkinliklerine dahil edin.
ItemDetailsLookup
, seçim kitaplığının bir MotionEvent
verildiğinde RecyclerView
öğeleriyle ilgili bilgilere erişmesine olanak tanır.
Bu, bir RecyclerView.ViewHolder
örneği tarafından yedeklenen veya bu örnekten ayıklanan ItemDetails
örnekleri için etkili bir fabrikadır.
Bir seçim değiştiğinde bildirim almak için SelectionTracker.SelectionObserver
kaydedin. Bir seçim ilk oluşturulduğunda, bu seçimi kullanıcıya sunmak ve seçime özgü 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 çubuğun üzerindeki geri oku bağlayabilirsiniz. Seçim boş olduğunda (kullanıcı son kez seçimi temizlediğinde) işlem modunu sonlandırın.
Kitaplık, etkinlik işleme ardışık düzeninin sonunda kullanıcının bir öğeye dokunarak öğeyi etkinleştirmeye 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
sınıfı örneği oluşturmak için uygulamanızın, RecyclerView
sınıfını SelectionTracker.Builder
olarak başlatmak için kullandığınız RecyclerView.Adapter
sınıfını 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.
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 fragmanda birden fazla farklı, seçilebilir liste bulunabileceğinden ve bunların hepsinin kayıtlı durumda kalması gerektiğinden bu kimlik gereklidir.
Ek kaynaklar
Daha fazla bilgi için aşağıdaki referanslara bakın.
RecyclerView
kullanan Sunflower demo uygulaması.- Kaydırılabilir bir liste görüntülemek için RecyclerView'i kullanma codelab'i.
- Android Kotlin Hakkında Temel Bilgiler: RecyclerView temelleri codelab'i.