Dinamik listeyi özelleştirin Android Jetpack'in bir parçasıdır.
RecyclerView
nesnelerini özel ihtiyaçlarınızı karşılayacak şekilde ö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 sunar. Çoğu durumda, görünümü yalnızca her bir görünüm sahibi için tasarlamanız ve bu görünümleri uygun verilerle güncellemek için kodu yazmanız gerekir. Ancak uygulamanızın belirli şartları varsa standart davranışı çeşitli yollarla değiştirebilirsiniz.
Bu dokümanda, olası özelleştirmelerin bazıları açıklanmaktadır.
Düzeni değiştirme
RecyclerView
, öğeleri ekranda tek tek konumlandırmak ve artık kullanıcı tarafından görülmeyen öğ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ümesinden 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ı önleyerek veya pahalı findViewById()
aramalar gerçekleştirerek performansı artırır. Android Destek Kitaplığı'nda üç standart düzen yöneticisi yer alır. Bu yöneticilerin
biri birçok özelleştirme seçeneği sunar:
LinearLayoutManager
: Öğeleri tek boyutlu bir listede düzenler.LinearLayoutManager
ileRecyclerView
kullanmak,ListView
düzeni gibi işlevler sağlar.GridLayoutManager
: Öğeleri, dama tahtasındaki kareler gibi iki boyutlu bir ızgarada düzenler.GridLayoutManager
ileRecyclerView
kullanmak,GridView
düzeni gibi işlevler sağlar.StaggeredGridLayoutManager
: Öğeleri, her bir sütun bir öncekinden biraz uzaklaşacak şekilde (Amerikan bayrağı üzerindeki yıldızlar gibi) iki boyutlu bir tablo içinde düzenler.
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ı ekle
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
öğesini genişleterek kendi animatör nesnenizi tanımlayabilirsiniz.
Liste öğesi seçimini etkinleştir
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ç öğe seçilebileceği gibi seçim davranışını kontrol eden politikalar üzerinde kontrol sahibi olabilirsiniz.
Bir RecyclerView
örneğine seçim desteği eklemek için şu adımları uygulayın:
- Hangi seçim anahtarı türünün kullanılacağını belirleyin ve bir
ItemKeyProvider
oluşturun.Seçilen öğeleri tanımlamak için kullanabileceğiniz üç anahtar türü vardır:
Parcelable
veUri
gibi alt sınıflarıString
Long
Seçim anahtarı türleri hakkında ayrıntılı bilgi için
SelectionTracker.Builder
öğesine göz atın. ItemDetailsLookup
uygulayın.- Kullanıcının
seçmesini veya seçimini kaldırmasını yansıtmak için
RecyclerView
içindekiView
öğe nesnelerini güncelleyin.Seçim kitaplığı, seçilen öğeler için varsayılan bir görsel süsleme sağlamaz.
onBindViewHolder()
uygularken bunu belirtin. Aşağıdaki yaklaşımı kullanmanızı öneririz:onBindViewHolder()
içinde, öğenin seçili olup olmamasına bağlı olaraktrue
veyafalse
ileView
nesnesindesetActivated()
yöntemini değilsetSelected()
çağırın.- Görünümün stilini, etkin durumunu gösterecek şekilde güncelleyin. Stili yapılandırmak için renk durumu listesi kaynağı kullanmanızı öneririz.
- Kullanıcıya seçimle ilgili bir işlemi gerçekleştirebileceği araçları sağlamak için
ActionMode
kullanın. - Yorumlanan ikincil işlemleri gerçekleştirin.
- Tüm parçaları
SelectionTracker.Builder
ile birleştirin. - Seçimi etkinlik yaşam döngüsü etkinliklerine dahil edin.
ItemDetailsLookup
, seçim kitaplığının, MotionEvent
belirtilen
RecyclerView
öğe hakkındaki bilgilere erişmesine izin verir.
Bir RecyclerView.ViewHolder
örneği tarafından yedeklenen veya bir RecyclerView.ViewHolder
örneğinden çıkarılan ItemDetails
örnekleri için fiilen bir fabrikadır.
Bir 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 sunmak için ActionMode
işlemini başlatın. Örneğin, ActionMode
çubuğuna sil düğmesi ekleyebilir ve seçimi temizlemek için çubuktaki geri okunu bağlayabilirsiniz. Seçim boş hale geldiğinde (kullanıcı, seçimi en son kez silerse) işlem modunu sonlandırır.
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
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();
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 örneği RecyclerView.Adapter
sayfanıza ekleyin. Aksi takdirde, bir öğenin seçili durumunu onBindViewHolder()
yönteminden kontrol edemezsiniz.
Etkinlik yaşam döngüsü etkinlikleri boyunca seçim durumunu korumak için uygulamanızın, sırasıyla etkinliğin onSaveInstanceState()
ve onRestoreInstanceState()
yöntemlerinden seçim izleyicinin onSaveInstanceState()
ve onRestoreInstanceState()
yöntemlerini çağırması gerekir. Uygulamanız, SelectionTracker.Builder
oluşturucuya benzersiz bir seçim kimliği de sağlamalıdır. Bir etkinlik veya parçanın, tümünün kayıtlı durumunda tutulması 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.
RecyclerView
kullanan Sunflower demo uygulaması.- Kaydırılabilir liste oluşturmak için RecyclerView'u kullanın codelab.
- Android Kotlin Temelleri: RecyclerView ile ilgili temel bilgiler codelab'i.