Dinamik listeyi özelleştirme Android Jetpack'in bir parçasıdır.
Nesneleri özel ihtiyaçlarınıza göre özelleştirebilirsiniz.RecyclerView
Create dynamic lists with
RecyclerView 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, 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üncellemek için kodu yazmanız gerekir. 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 kullanıcıya artık görünür olmayan öğ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 bir düzen yöneticisi, bağdaştırıcıdan görünümün içeriğini veri kümesindeki farklı bir öğeyle değiştirmesini isteyebilir. Görünümleri bu şekilde yeniden kullanmak, gereksiz görünümler oluşturmaktan veya pahalı findViewById()
aramalar yapmaktan kaçınarak performansı artırır. Android Destek Kitaplığı'nda, her biri birçok özelleştirme seçeneği sunan üç standart düzen yöneticisi bulunur:
LinearLayoutManager
: Öğeleri tek boyutlu bir listede düzenler.RecyclerView
ileLinearLayoutManager
kullanımı,ListView
düzeni gibi işlevler sağlar.GridLayoutManager
: Öğeleri, dama tahtasındaki kareler gibi iki boyutlu bir ızgarada düzenler.RecyclerView
ileGridLayoutManager
kullanmak,GridView
düzeni gibi işlevler sağlar.StaggeredGridLayoutManager
: Öğeleri iki boyutlu bir ızgarada düzenler. Her sütun, bir öncekinden biraz kaydırılmıştır (ör. ABD bayrağındaki yıldızlar).
Bu düzen yöneticileri ihtiyaçlarınıza uygun değilse RecyclerView.LayoutManager
abstract sınıfını genişleterek kendi düzen yöneticinizi oluşturabilirsiniz.
Öğe animasyonları ekleme
Bir öğe her değiştiğinde RecyclerView
, görünümünü değiştirmek için animatör kullanır. Bu animatör, soyut RecyclerView.ItemAnimator
sınıfını genişleten bir nesnedir. Varsayılan olarak, animasyon sağlamak için RecyclerView
kullanılır.
DefaultItemAnimator
Özel animasyonlar sağlamak istiyorsanız RecyclerView.ItemAnimator
öğesini 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şiyle 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çime 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:
- Hangi seçim anahtarı türünü kullanacağınıza karar verin ve ardından bir
ItemKeyProvider
oluşturun.Seçili öğeleri tanımlamak için kullanabileceğiniz üç temel 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. - Uygulama
ItemDetailsLookup
. - Kullanıcının seçip seçmediğini yansıtmak için
RecyclerView
içindekiView
nesnelerini güncelleyin.Seçim kitaplığı, seçilen öğ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çilip seçilmediğine bağlı olaraktrue
veyafalse
ileView
nesnesindesetActivated()
—değil—setSelected()
çağrısı yapın.- Görünümün stilini, etkinleştirilmiş durumu temsil edecek şekilde güncelleyin. Stili yapılandırmak için renk durumu liste kaynağı kullanmanızı öneririz.
- Kullanıcıya seçim üzerinde işlem yapabileceği araçlar sunmak için
ActionMode
kullanın. - Yorumlanan ikincil işlemleri gerçekleştirin.
- Her şeyi
SelectionTracker.Builder
ile bir araya getirin. - Seçimi etkinlik yaşam döngüsü etkinliklerine dahil edin.
ItemDetailsLookup
, seçim kitaplığının MotionEvent
verilen RecyclerView
öğeleriyle ilgili bilgilere erişmesine olanak tanır.
Bu, RecyclerView.ViewHolder
örneği tarafından yedeklenen veya RecyclerView.ViewHolder
örneğinden çıkarılan 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 kez oluşturulduğunda, bunu kullanıcıya sunmak ve seçime özel işlemler sağlamak için ActionMode
başlatılır. Örneğin, ActionMode
çubuğuna silme düğmesi ekleyebilir ve çubuktaki geri okunu seçimi temizlemeye bağlayabilirsiniz. Seçim boşaldığında (kullanıcı son seçimini temizlediğinde) işlem modunu sonlandırın.
Etkinlik işleme hattının sonunda kitaplık, kullanıcının bir öğeye dokunarak onu 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
sayfasına bakın.
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
oluşturmak için uygulamanız, RecyclerView
öğesini SelectionTracker.Builder
olarak başlatmak üzere kullandığınız RecyclerView.Adapter
ile aynı RecyclerView.Adapter
sağlamalıdır. Bu nedenle, SelectionTracker
örneğini oluşturduktan sonra RecyclerView.Adapter
içine yerleştirin. Aksi takdirde, bir öğenin seçili durumunu onBindViewHolder()
yönteminden kontrol edemezsiniz.
Seçim durumunu etkinlik yaşam döngüsü etkinlikleri boyunca korumak için uygulamanızın, seçim izleyicinin onSaveInstanceState()
ve onRestoreInstanceState()
yöntemlerini sırasıyla etkinliğin onSaveInstanceState()
ve onRestoreInstanceState()
yöntemlerinden çağırması gerekir. Uygulamanızın, SelectionTracker.Builder
oluşturucusuna benzersiz bir seçim kimliği de sağlaması gerekir. Bir etkinlik veya parça birden fazla farklı, seçilebilir liste içerebileceğinden ve bunların tümünün kaydedilmiş 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 liste görüntülemek için RecyclerView'ı kullanma codelab'i.
- Android Kotlin Hakkında Temel Bilgiler: RecyclerView'ın temelleri codelab'i.