Dinamik listeyi özelleştirme Android Jetpack'in bir parçasıdır.
Nesneleri özel ihtiyaçlarınızı karşılayacak şekilde RecyclerView
özelleştirebilirsiniz. RecyclerView ile dinamik listeler oluşturma konusunda açıklanan standart sınıflar, çoğu geliştiricinin ihtiyaç duyduğu tüm işlevleri sağlar. Ç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 kod yazmanız gerekir. Ancak uygulamanızın belirli gereksinimleri varsa standart davranışı birkaç şekilde değiştirebilirsiniz.
Bu dokümanda, olası özelleştirmelerden bazıları açıklanmaktadır.
Düzeni değiştirme
RecyclerView
, ekrandaki tek tek öğeleri konumlandırmak ve artık kullanıcı tarafından görülemeyen öğe görünümlerini ne zaman yeniden kullanacağı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, 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ı veya pahalı findViewById()
arama işlemlerinin yapılmasını önleyerek 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.LinearLayoutManager
ile birRecyclerView
kullanmak,ListView
düzeni gibi işlevler sağlar.GridLayoutManager
: Öğeleri, dama tahtası üzerindeki kareler gibi iki boyutlu bir ızgarada düzenler.GridLayoutManager
ile birRecyclerView
kullanmak,GridView
düzeni gibi işlevler sağlar.StaggeredGridLayoutManager
: öğeleri iki boyutlu bir ızgarada düzenler. Her sütun, bir önceki sütundan biraz uzaklaşarak Amerikan bayrağındaki yıldızlar gibi.
Bu düzen yöneticileri ihtiyaçlarınıza uymuyorsa RecyclerView.LayoutManager
soyut sınıfını genişleterek kendi şablonunuzu 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. RecyclerView
, animasyonu sağlamak için varsayılan olarak 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 bir 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ç tane öğ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 şu adımları uygulayın:
- Kullanılacak seçim anahtarı türünü belirleyin, ardından
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 bkz.
SelectionTracker.Builder
. ItemDetailsLookup
uygulayın.RecyclerView
içindekiView
öğesinin nesnelerini kullanıcının seçtiğini veya seçimini kaldırdığını yansıtacak şekilde güncelleyin.Seçim kitaplığı, seçilen öğeler için varsayılan bir görsel süsleme sağlamaz.
onBindViewHolder()
yöntemini uygularken bunu sağlayın. Aşağıdaki yaklaşımı öneririz:onBindViewHolder()
içinde, öğenin seçili olup olmamasına bağlı olaraktrue
veyafalse
ileView
nesnesindesetActivated()
(setSelected()
değil) çağrısı yapın.- Görünümün stilini, etkin olma durumunu gösterecek şekilde güncelleyin. Stili yapılandırmak için bir renk durumu listesi kaynağı kullanmanızı öneririz.
- Kullanıcıya seçimle ilgili bir işlem gerçekleştirecek araçlar sağlamak için
ActionMode
kullanın. - Yorumlanan ikincil işlemleri gerçekleştirme.
SelectionTracker.Builder
ile her şeyi birleştirin.- Seçimi etkinlik yaşam döngüsü etkinliklerine dahil edin.
ItemDetailsLookup
, seçim kitaplığının MotionEvent
verilen RecyclerView
öğe hakkındaki bilgilere erişmesine izin verir.
Bir RecyclerView.ViewHolder
örneği tarafından yedeklenen veya RecyclerView.ViewHolder
örneğinden çıkarılan ItemDetails
örnekleri için etkin bir şekilde fabrika işlevi görü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 özgü işlemler sağlamak için ActionMode
işlemini 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ş hale geldiğinde (kullanıcı son kez seçimi temizlerse) işlem modunu sonlandırın.
Etkinlik işleme ardışık düzeninin sonunda kitaplık, kullanıcının bir öğeyi 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
konusuna 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();
SelectionTracker
örneği derlemek için uygulamanızın, RecyclerView
uygulamasını SelectionTracker.Builder
adlı CSS'ye ilk kullanıma hazırlamak için kullandığınız RecyclerView.Adapter
sağlayıcısını sağlaması gerekir. Bu nedenle, SelectionTracker
örneğini oluşturduktan sonra RecyclerView.Adapter
kodunuza ekleyin. Aksi takdirde, bir öğenin seçili durumunu onBindViewHolder()
yönteminden kontrol edemezsiniz.
Uygulamanızın etkinlik yaşam döngüsü etkinlikleri genelinde seçim durumunu korumak için etkinliğin onSaveInstanceState()
ve onRestoreInstanceState()
yöntemlerinden seçim izleyicinin onSaveInstanceState()
ve onRestoreInstanceState()
yöntemlerini çağırması gerekir. Uygulamanız ayrıca SelectionTracker.Builder
oluşturucuya benzersiz bir seçim kimliği sağlamalıdır. Bir etkinlik veya parça, birden fazla farklı ve seçilebilir listeye sahip olabileceği için bu kimlik gereklidir. Bu listelerin hepsinin kaydedilmiş durumda tutulması gerekir.
Ek kaynaklar
Ek 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'u kullanın codelab'i.
- Android Kotlin ile İlgili Temel Bilgiler: RecyclerView temel bilgileri codelab'i.