Leanback UI 도구 키트 내의 Paging은 AndroidX와 동일하게 작동합니다.
Paging 3 라이브러리:
페이지에 페이징을 추가하는 작업을
RecyclerView.Adapter
Leanback Paging 라이브러리를 사용하면 노출되는 어댑터는 일반적으로
ObjectAdapter 드림
대신 라이브러리는 ObjectAdapter에 페이징 지원을 추가합니다.
그런 다음
다음을 사용한 Paging 3 문서
- androidx.leanback.paging.PagingDataAdapterandroidx.paging.PagingDataAdapter입니다. 유일한 차이점은 이제
Presenter
또는
PresenterSelector
다음과 같이 일반적으로 ObjectAdapter를 사용하는 모든 위치에서 작동합니다.
ListRow:
Leanback 탭 라이브러리에는 지원하는 테마와 포커스 방법에 제한이 있습니다.
처리됩니다.
지원되는 테마
Theme.AppCompat에서 파생된 테마만 지원됩니다. TabLayout
하위 요소가 아닌 테마를 방지하는 테마 시행 제약조건이 포함되어 있습니다.
총 Theme.AppCompat 중 하나가 사용되지 않습니다. 또한
Leanback UI 툴킷입니다.
탭에서 위로 포커스 이동
레이아웃 높이가 화면 높이보다 크고 D패드를 누를 경우
위로 버튼, 컨트롤이 프래그먼트 내부에 머무르지 않고 탭으로 다시 이동함
그 위의 항목으로 이동합니다 (그림 1 참고). 이 문제를 처리하기 위해
프래그먼트 내에서 포커스 검색을 재정의해야 합니다. 예를 들어
RowsSupportFragmentBrowseSupportFragment 드림
재정의된 포커스 검색 메서드가 있으므로 탭 내에서 사용할 수 없습니다.
포커스가 탭으로 다시 이동하지 못하게 합니다.
<ph type="x-smartling-placeholder"></ph>
<ph type="x-smartling-placeholder">
<ph type="x-smartling-placeholder"></ph>
그림 1. D패드 위쪽 버튼을 누르면 이전 항목 대신 탭으로 포커스가 이동합니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Leanback UI toolkit libraries\n\nBuild better with Compose \nCreate beautiful UIs with minimal code using Jetpack Compose for Android TV OS. \n[Compose for TV →](/training/tv/playback/compose) \n\nThe Leanback UI toolkit provides some TV-specific libraries exclusive to\napps developed for Android TV OS. These libraries include the following:\n\n- [Leanback](/training/tv/playback) library: provides UI templates that simplify creating Android TV apps.\n- [Leanback Preferences](/reference/androidx/leanback/preference/package-summary) library: provides preferences and settings screens that are consistent with the platform but can be themed to match your app.\n- [Leanback Paging](#leanback-paging-library) library: supports the AndroidX paging model for `ObjectAdapters`, which are commonly used with the Leanback templates.\n- [Leanback Tabs](#leanback-tabs-library) library: supports tabbed navigation on Android TV.\n\nLeanback paging library\n-----------------------\n\nPaging inside the Leanback UI toolkit works the same as the AndroidX\n[Paging 3](/topic/libraries/architecture/paging/v3-overview) library, which\nsimplifies adding paging to a\n[`RecyclerView.Adapter`](/reference/kotlin/androidx/recyclerview/widget/RecyclerView.Adapter).\nWith the Leanback Paging library, the adapter that is exposed is typically an\n[`ObjectAdapter`](/reference/kotlin/androidx/leanback/widget/ObjectAdapter)\ninstead, so the library adds paging support to `ObjectAdapter`.\n\nTo add a paging adapter to your app, first add the library dependency to your project: \n\n implementation \"androidx.leanback:leanback-paging:$version\"\n\nThen follow the\n[Paging 3 documentation](/topic/libraries/architecture/paging/v3-overview) using\n`androidx.leanback.paging.PagingDataAdapter` instead of\n`androidx.paging.PagingDataAdapter`. The only difference is that you're now able\nto pass in a [`Presenter`](/reference/kotlin/androidx/leanback/widget/Presenter)\nor\n[`PresenterSelector`](/reference/kotlin/androidx/leanback/widget/PresenterSelector).\nThis works anywhere you would ordinarily use an `ObjectAdapter`, such as in a\n[`ListRow`](/reference/kotlin/androidx/leanback/widget/ListRow): \n\n### Kotlin\n\n```kotlin\nval adapter: PagingDataAdapter\u003cMyItem\u003e = PagingDataAdapter(myPresenter,\n object : DiffUtil.ItemCallback\u003cMyItem\u003e() {\n override fun areItemsTheSame(\n oldItem: MyItem,\n newItem: MyItem\n ): Boolean {\n return oldItem.id === newItem.id\n }\n\n override fun areContentsTheSame(\n oldItem: MyItem,\n newItem: MyItem\n ): Boolean {\n return oldItem == newItem\n }\n })\n\nval header = HeaderItem(headerTitle)\nval row = ListRow(header, adapter)\n```\n\n### Java\n\n```java\nPagingDataAdapter\u003cMyItem\u003e adapter = new PagingDataAdapter(myPresenter, new DiffUtil.ItemCallback\u003cMyItem\u003e() {\n @Override\n public boolean areItemsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) {\n return oldItem.getId().equals(newItem.getId());\n }\n\n @Override\n public boolean areContentsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) {\n return oldItem.equals(newItem);\n }\n});\n\nHeaderItem header = new HeaderItem(headerTitle);\nRow row = new ListRow(header, adapter);\n```\n\nLeanback Tabs library\n---------------------\n\nThe Leanback UI toolkit templates provide side navigation in the\n[browse screen](/training/tv/playback/browse). To add a row of tabs horizontally\nacross the top of the app, you can instead use Leanback Tabs instead.\n\nAdd the library dependency to your project: \n\n implementation \"androidx.leanback:leanback-tab:$version\"\n\nThen implement tabs using `LeanbackTabLayout` and `LeanbackViewPager` by\nfollowing the existing\n[ViewPager guide](/guide/navigation/navigation-swipe-view). Note that\n`LeanbackViewPager` is based on `ViewPager`, not `ViewPager2`.\n\nThe following is an example: \n\n### Kotlin\n\n```kotlin\nval leanbackTabLayout = findViewById\u003cLeanbackTabLayout\u003e(R.id.tab_layout)\nval leanbackViewPager = findViewById\u003cLeanbackViewPager\u003e(R.id.view_pager)\n\nleanbackViewPager.setAdapter(adapter)\nleanbackTabLayout.setupWithViewPager(leanbackViewPager)\n```\n\n### Java\n\n```java\nLeanbackTabLayout leanbackTabLayout = findViewById(R.id.tab_layout);\nLeanbackViewPager leanbackViewPager = findViewById(R.id.view_pager);\n\nleanbackViewPager.setAdapter(adapter);\nleanbackTabLayout.setupWithViewPager(leanbackViewPager);\n```\n\n### Limitations\n\nThe Leanback Tabs library has limitations in the themes it supports and how focus\nmovement is handled.\n\n#### Supported themes\n\nOnly themes that are derived from `Theme.AppCompat` are supported. `TabLayout`\ncontains a theme enforcement constraint, which prevents any nondescendant theme\nof `Theme.AppCompat` from being used. You can also use the bridge theme for the\nLeanback UI toolkit.\n\n#### Focus movement from tabs to top\n\nWhen the layout height is greater than the screen height and you press the D-pad\nup button, control moves back to the tab instead of staying inside the fragment\nand navigating to an item above it (see figure 1). To handle this issue, contents\ninside the fragment must override focus search; for example, use\n[`RowsSupportFragment`](/reference/androidx/leanback/app/RowsSupportFragment).\n[`BrowseSupportFragment`](/reference/androidx/leanback/app/BrowseSupportFragment)\ncannot be used inside a tab as it has an overridden focus search method which\nprevents the focus from moving back to the tab.\n**Figure 1.** D-pad up button moves focus to tab instead of preceding item."]]