Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Dinamik listeyi özelleştirme
Android Jetpack'in bir parçasıdır.
Yazma yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Oluşturma bölümünde düzenlerle nasıl çalışacağınızı öğrenin.
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ığı üç standart düzen yöneticisi içerir. Bunların her biri birçok özelleştirme seçeneği sunar:
LinearLayoutManager
:
Öğeleri tek boyutlu bir listede düzenler. RecyclerView
ile LinearLayoutManager
kullanıldığında ListView
düzenine benzer işlevler sunulur.
GridLayoutManager
:
Öğeleri, dama tahtasındaki kareler gibi iki boyutlu bir ızgarada düzenler. RecyclerView
ile GridLayoutManager
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. Örneğin, ABD bayrağındaki yıldızlar bu şekilde düzenlenir.
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öneticilerinizi 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:
Seçim anahtarı türleri hakkında ayrıntılı bilgi için SelectionTracker.Builder
bölümüne bakın.
- Uygulama
ItemDetailsLookup
.
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 bu örnekten çıkarılan ItemDetails
örnekleri için bir fabrika gibidir.
- Kullanıcının seçip seçmediğini yansıtmak için
RecyclerView
içindeki View
nesnelerini 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çilip seçilmediğine bağlı olarak true
veya false
ile View
nesnesinde setActivated()
—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.
Bir seçim değiştiğinde bildirim almak için
SelectionTracker.SelectionObserver
kaydedin. Bir seçim ilk kez oluşturulduğunda,
ActionMode
, bunu kullanıcıya sunmaya ve seçime özel işlemler sağlamaya başlar. Örneğin, ActionMode
çubuğuna bir 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.
- Yorumlanan ikincil işlemleri gerçekleştirin.
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.
- Her şeyi
SelectionTracker.Builder
ile bir araya getirin.
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.Adapter
başlatmak üzere kullandığınız RecyclerView
ile aynı RecyclerView.Adapter
sağlamalıdır.SelectionTracker.Builder
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çimi etkinlik
yaşam döngüsü etkinliklerine dahil edin.
Seçim durumunu etkinlik yaşam döngüsü etkinliklerinde 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.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-08-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-08-27 UTC."],[],[],null,["# Customize a dynamic list\nPart of [Android Jetpack](/jetpack).\n=============================================================\n\nTry the Compose way \nJetpack Compose is the recommended UI toolkit for Android. Learn how to work with layouts in Compose. \n[Lazy Lists and Grids →](/jetpack/compose/lists#lazy) \n\nYou can customize\n[RecyclerView](/reference/androidx/recyclerview/widget/RecyclerView)\nobjects to meet your specific needs. The standard classes described in\n[Create dynamic lists with\nRecyclerView](/guide/topics/ui/layout/recyclerview) provide all the functionality that most developers need. In\nmany cases, you only need to design the view for each view holder and write the\ncode to update those views with the appropriate data. However, if your app has\nspecific requirements, you can modify the standard behavior in a number of ways.\nThis document describes some of the possible customizations.\n\nModify the layout\n-----------------\n\n`RecyclerView` uses a layout manager to position the individual\nitems on the screen and to determine when to reuse item views that are no longer\nvisible to the user. To reuse---or *recycle* ---a view, a layout\nmanager might ask the adapter to replace the contents of the view with a\ndifferent element from the dataset. Recycling views this way improves\nperformance by avoiding the creation of unnecessary views or performing\nexpensive\n[findViewById()](/reference/android/app/Activity#findViewById(int))\nlookups. The Android Support Library includes three standard layout managers,\nach of which offers many customization options:\n\n- [LinearLayoutManager](/reference/androidx/recyclerview/widget/LinearLayoutManager): arranges the items in a one-dimensional list. Using a `RecyclerView` with `LinearLayoutManager` provides functionality like a [ListView](/reference/android/widget/ListView) layout.\n- [GridLayoutManager](/reference/androidx/recyclerview/widget/GridLayoutManager): arranges the items in a two-dimensional grid, like the squares on a checkerboard. Using a `RecyclerView` with `GridLayoutManager` provides functionality like a [GridView](/reference/android/widget/GridView) layout.\n- [StaggeredGridLayoutManager](/reference/androidx/recyclerview/widget/StaggeredGridLayoutManager): arranges the items in a two-dimensional grid, with each column slightly offset from the one before, like the stars on an American flag.\n\nIf these layout managers don't suit your needs, you can create your own by\nextending the\n[RecyclerView.LayoutManager](/reference/androidx/recyclerview/widget/RecyclerView.LayoutManager)\nabstract class.\n\nAdd item animations\n-------------------\n\nWhenever an item changes, `RecyclerView` uses an *animator*\nto change its appearance. This animator is an object that extends the abstract\n[RecyclerView.ItemAnimator](/reference/androidx/recyclerview/widget/RecyclerView.ItemAnimator)\nclass. By default, the `RecyclerView` uses\n[DefaultItemAnimator](/reference/androidx/recyclerview/widget/DefaultItemAnimator)\nto provide the animation. If you want to provide custom animations, you can\ndefine your own animator object by extending\n`RecyclerView.ItemAnimator`.\n\nEnable list-item selection\n--------------------------\n\nThe\n[`recyclerview-selection`](/reference/androidx/recyclerview/selection/package-summary)\nlibrary lets users select items in a `RecyclerView` list using touch\nor mouse input. This lets you retain control over the visual presentation of a\nselected item. You can also retain control over policies controlling selection\nbehavior, such as which items are eligible for selection and how many items can\nbe selected.\n\nTo add selection support to a `RecyclerView` instance, follow\nthese steps:\n\n1. Determine which selection key type to use, then build an [`ItemKeyProvider`](/reference/androidx/recyclerview/selection/ItemKeyProvider).\n\n There are three key types you can use to identify selected items:\n - [Parcelable](/reference/android/os/Parcelable) and its subclasses, like [Uri](/reference/android/net/Uri)\n - [String](/reference/java/lang/String)\n - [Long](/reference/java/lang/Long)\n\n For detailed information about selection-key types, see\n [SelectionTracker.Builder](/reference/androidx/recyclerview/selection/SelectionTracker.Builder).\n2. Implement [ItemDetailsLookup](/reference/androidx/recyclerview/selection/ItemDetailsLookup).\n3. `ItemDetailsLookup` lets the selection library access information about `RecyclerView` items given a [MotionEvent](/reference/android/view/MotionEvent). It is effectively a factory for [`ItemDetails`](/reference/androidx/recyclerview/selection/ItemDetailsLookup.ItemDetails) instances that are backed up by, or extracted from, a [RecyclerView.ViewHolder](/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder) instance.\n4. Update item [View](/reference/android/view/View) objects in the `RecyclerView` to reflect whether the user selects or unselects them.\n\n The selection library doesn't provide a default visual decoration for the\n selected items. Provide this when you implement\n [onBindViewHolder()](/reference/androidx/recyclerview/widget/RecyclerView.Adapter#onBindViewHolder(VH, int)).\n We recommend the following approach:\n - In `onBindViewHolder()`, call [setActivated()](/reference/android/view/View#setActivated(boolean))---**not** [setSelected()](/reference/android/view/View#setSelected(boolean))---on the `View` object with `true` or `false`, depending on whether the item is selected.\n - Update the styling of the view to represent the activated status. We recommend using a [color state\n list resource](/guide/topics/resources/color-list-resource) to configure the styling.\n5. Use [ActionMode](/reference/androidx/appcompat/view/ActionMode) to provide the user with tools to perform an action on the selection.\n6. Register a [SelectionTracker.SelectionObserver](/reference/androidx/recyclerview/selection/SelectionTracker.SelectionObserver) to be notified when a selection changes. When a selection is first created, start `ActionMode` to present this to the user and provide selection-specific actions. For example, you can add a delete button to the `ActionMode` bar and connect the back arrow on the bar to clear the selection. When the selection becomes empty---if the user clears the selection the last time---terminate action mode.\n7. Perform any interpreted secondary actions.\n8. At the end of the event processing pipeline, the library might determine that the user is attempting to activate an item, by tapping it, or is attempting to drag an item or set of selected items. React to these interpretations by registering the appropriate listener. For more information, see [SelectionTracker.Builder](/reference/androidx/recyclerview/selection/SelectionTracker.Builder).\n9. Assemble everything with `SelectionTracker.Builder`.\n10. The following example shows how to put these pieces together: \n\n### Kotlin\n\n```kotlin\n var tracker = SelectionTracker.Builder(\n \"my-selection-id\",\n recyclerView,\n StableIdKeyProvider(recyclerView),\n MyDetailsLookup(recyclerView),\n StorageStrategy.createLongStorage())\n .withOnItemActivatedListener(myItemActivatedListener)\n .build()\n \n```\n\n### Java\n\n```java\n SelectionTracker tracker = new SelectionTracker.Builder\u003c\u003e(\n \"my-selection-id\",\n recyclerView,\n new StableIdKeyProvider(recyclerView),\n new MyDetailsLookup(recyclerView),\n StorageStrategy.createLongStorage())\n .withOnItemActivatedListener(myItemActivatedListener)\n .build();\n \n```\n11. To build a [SelectionTracker](/reference/androidx/recyclerview/selection/SelectionTracker) instance, your app must supply the same [RecyclerView.Adapter](/reference/androidx/recyclerview/widget/RecyclerView.Adapter) that you use to initialize `RecyclerView` to `SelectionTracker.Builder`. For this reason, after you create the `SelectionTracker` instance, inject it into your `RecyclerView.Adapter`. Otherwise, you can't check an item's selected status from the `onBindViewHolder()` method.\n12. Include selection in the [activity\n lifecycle](/guide/components/activities/activity-lifecycle) events.\n13. To preserve selection state across the activity lifecycle events, your app must call the selection tracker's [onSaveInstanceState()](/reference/androidx/recyclerview/selection/SelectionTracker#onSaveInstanceState(android.os.Bundle)) and [onRestoreInstanceState()](/reference/androidx/recyclerview/selection/SelectionTracker#onRestoreInstanceState(android.os.Bundle)) methods from the activity's [onSaveInstanceState()](/reference/android/app/Activity#onSaveInstanceState(android.os.Bundle)) and [onRestoreInstanceState()](/reference/android/app/Activity#onRestoreInstanceState(android.os.Bundle)) methods, respectively. Your app must also supply a unique selection ID to the `SelectionTracker.Builder` constructor. This ID is required because an activity or a fragment might have more than one distinct, selectable list, all of which need to be persisted in their saved state.\n\nAdditional resources\n--------------------\n\nSee the following references for additional information.\n\n- [Sunflower\n demo app](https://github.com/googlesamples/android-sunflower), which uses `RecyclerView`.\n- [Use\n RecyclerView to display a scrollable list](/codelabs/basic-android-kotlin-training-recyclerview-scrollable-list#0) codelab.\n- [Android\n Kotlin Fundamentals: RecyclerView fundamentals](/codelabs/kotlin-android-training-recyclerview-fundamentals) codelab."]]