안드로이드 개발자 ( 목록 및 카드 만들기 )에서 :
RecyclerView 위젯은 ListView의보다 유연하고 유연한 버전입니다.
좋아, 그것은 시원하게 들리지만,이 예제 사진을 보았을 때, 나는이 두 가지의 차이점에 대해 정말로 혼란스러워했습니다.
위의 그림은 ListView
사용자 정의 어댑터 를 사용하여 쉽게 만들 수 있습니다 .
어떤 상황에서 사용해야 RecyclerView
합니까?
안드로이드 개발자 ( 목록 및 카드 만들기 )에서 :
RecyclerView 위젯은 ListView의보다 유연하고 유연한 버전입니다.
좋아, 그것은 시원하게 들리지만,이 예제 사진을 보았을 때, 나는이 두 가지의 차이점에 대해 정말로 혼란스러워했습니다.
위의 그림은 ListView
사용자 정의 어댑터 를 사용하여 쉽게 만들 수 있습니다 .
어떤 상황에서 사용해야 RecyclerView
합니까?
답변:
RecyclerView
ListView
개선 으로 작성 되었으므로 예, ListView
제어 기능이 있는 첨부 목록을 만들 수는 있지만 사용하는 RecyclerView
것이 더 쉽습니다.
위 / 아래로 스크롤하는 동안 셀을 재사용 합니다. ListView
어댑터 에서 뷰 홀더를 구현하면 가능 하지만 선택 사항이지만 RecycleView
어댑터를 작성하는 기본 방법입니다.
컨테이너에서 목록을 분리 하여 런타임에 목록 항목을 다른 컨테이너 (linearLayout, gridLayout)에 쉽게 설정하여 설정할 수 LayoutManager
있습니다.
예:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
ItemAnimator
. 애니메이션이 분리되어에 위임됩니다 .에 대한 자세한 내용 RecyclerView
이 있지만 이러한 요점이 주요 사항이라고 생각합니다.
결론적으로, RecyclerView
우려의 위임 패턴을 따르는 "목록 데이터"를 처리하기위한보다 융통성있는 제어는 재활용 품목이라는 하나의 작업만을 떠난다.
목록보기의 성능을 높이려면 홀더 패턴을 구현해야하며 목록을 여러 종류의보기로 채우려는 경우 특히 엉망입니다.
RecyclerView는이 패턴을 베이킹하여 혼란스럽게 만듭니다. 또한 그리드와 같이 직선적이지 않은 다른 레이아웃을보다 쉽게 처리 할 수 있도록 유연성이 뛰어납니다.
ListView
의 조상 RecyclerView
입니다. ListView
하지 않았거나 잘하지 못한 것들이 많이있었습니다 . 단점을 모으고 ListView
문제를 다른 도메인으로 추상화하여 문제를 해결했다면 리사이클 러보기와 같은 결과가 나타납니다. ListViews의 주요 문제점은 다음과 같습니다.
View
동일한 항목 유형에 재사용을 강요하지 않았습니다 (에서 사용되는 어댑터 중 하나를 살펴보십시오 ListView
. getView 메소드를 연구하면 프로그래머가 전달 된 경우에도 프로그래머가 모든 행에 대해 새보기를 작성하는 것을 막을 수는 없습니다. convertView
변수 를 통해 )
비용이 많이 드는 findViewById
사용을 막지 못함 (위에서 언급 한 것처럼 뷰를 재활용하는 경우에도 개발자가 findViewById
하위 뷰의 표시된 내용을 업데이트 하도록 호출 할 수있었습니다. ViewHolder
패턴 의 주요 목적은 호출 ListViews
을 캐시하는 것이 었습니다 findViewById
. 플랫폼의 일부가 아니기 때문에 알고 있다면 사용 가능)
행으로 표시되는 뷰가있는 세로 스크롤 만 지원됨 (리사이클 러보기는 뷰의 위치와 이동 방법에 신경 쓰지 않고로 추상화됩니다 LayoutManager
. 따라서 리사이클 러는 ListView
위와 같이 전통적인 것뿐만 아니라 GridView
, 그것에 국한되지 않고 더 많은 일을 할 수 있지만,이를 위해서는 프로그래밍 작업이 필요합니다.
추가 / 제거 할 애니메이션은 고려 된 사용 사례가 아닙니다. 이 문제를 해결하는 방법을 알아내는 것은 전적으로 귀하의 몫입니다 (RecyclerView 비교. 어댑터 클래스 통지 * 메소드 오퍼링 v. 아이디어를 얻기위한 ListViews 비교).
요컨대 , 더 많은 코딩을 수행해야 할 수도 있지만 RecyclerView
더 유연하게 사용할 ListView
수 있습니다.
그만큼
RecyclerView
유사한 방법으로 모든 어댑터 기반 뷰를 렌더링 할 준비가되어 새로운 뷰 그룹이다. 의 후임자라고 가정ListView and GridView
하고에서 찾을 수 있습니다latest support-v7 version
. 는RecyclerView
개발 된 확장 하지만 약간의 통증 - 인 - 더 - 엉덩이를 투여하지 않고, 그래서 당신이 생각할 수있는 레이아웃의 모든 종류를 만들 수 있습니다 마음입니다.
compile 'com.android.support:recyclerview-v7:27.0.0'
RecyclerView
실제로는 ~ powerful view
보다ListView
. 자세한 내용은 이 페이지를 방문 하십시오 .
다음은 RecyclerView와 ListView의 주요 요점 / 차이점입니다. 현명하게 전화하십시오.
ListView가 효과가 있다면 마이그레이션 할 이유가 없습니다. 새 UI를 작성하는 경우 RecyclerView를 사용하는 것이 좋습니다.
RecylerView에는 ViewHolder가 내장되어 있으므로 listView와 같이 자체 구현 할 필요가 없습니다. 특정 인덱스에서도 통지 지원
항목 추가 또는 제거 애니메이션 등의 작업은 아무것도하지 않아도 RecyclerView에 이미 구현되어 있습니다.
레이아웃 관리자를 RecyclerView와 연결할 수 있습니다. 이것은 RecycleView에서 임의의 뷰를 얻는 데 사용할 수 있지만 이것이 ListView의 제한 사항이었습니다. ListView에서 사용 가능한 유일한 뷰 유형은 세로 ListView입니다. 수평 ListView를 구현하는 공식적인 방법은 없습니다. 이제 RecyclerView를 사용하여
i) 수직 및 수평 목록을 모두 지원하는 LinearLayoutManager, ii) 엇갈린 목록과 같이 Pinterest를 지원하는 StaggeredLayoutManager, iii) GridLayoutManager-갤러리 앱에서 볼 수있는 그리드 표시를 지원합니다.
가장 좋은 점은 원하는대로이 모든 것을 동적으로 수행 할 수 있다는 것입니다.
위의 차이점 외에도 다음과 같은 몇 가지 사항이 더 있습니다.
RV는 뷰 생성과 뷰에 대한 데이터 바인딩을 분리합니다. LV에서, 데이터를 바인딩하기 전에 convertView가 널인지보기를 작성해야합니다. 따라서 RV의 경우보기는 필요할 때만 작성되지만 LV의 경우 변환보기 확인을 놓칠 수 있으며 매번보기를 작성합니다.
LayoutManager를 사용하면 그리드와 목록 간 전환이 더욱 쉬워졌습니다.
단일 항목 만 변경하더라도 모든 항목을 통지하고 업데이트 할 필요가 없습니다.
LV의 경우 뷰 캐싱을 구현해야했습니다. 기본적으로 RV로 제공됩니다. 뷰 캐싱과 재활용 간에는 차이가 있습니다.
RV의 경우 매우 쉬운 아이템 애니메이션.
listview에 비해 RecyclerView의 장점 :
기본적으로 ViewHolder를 포함합니다.
쉬운 애니메이션.
수평, 격자 및 지그재그 형 레이아웃 지원
recyclerView에 비해 listView의 장점 :
분배기를 쉽게 추가 할 수 있습니다.
간단한 일반 목록을 위해 내장형 arrayAdapter를 사용할 수 있습니다.
머리글 및 바닥 글을 지원합니다.
OnItemClickListner를 지원합니다.
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
한 다음과 같은 작업을 수행 한 후 사용하여 recyclerView에 쉽게 디바이더를 추가 할 수 있습니다recyclerView = view.findViewById(R.id.feed);
RecyclerView와 ListView의 8 가지 차이점
1. ViewHolder 패턴
findViewById () 메소드 에 대한 호출을 줄이는 데 사용되는 패턴 입니다.
ListView에서는 ViewHolder를 사용하지 않고도 목록을 쉽게 작성할 수 있습니다. 그러나 RecyclerView의 경우는 아닙니다.
2. 어댑터
둘 다 AdapterView입니다. 어댑터 클래스를 기반으로 작동합니다.
ArrayAdapter, CursorAdapter와 같은 기본 어댑터를 사용하여 ListView를 쉽게 작성할 수 있지만 RecyclerView는 RecyclerView.Adapter 클래스를 제공하여 새 사용자 정의 어댑터 클래스를 작성합니다.
RecyclerView와 함께 ArrayAdapter 또는 기타 내장 어댑터를 사용할 수 없습니다.
3. 품목 배열
간단하고 적은 코드로 Vertical ListView를 만들었습니다. 그러나 GridView를 만들어야하는 경우 어떻게해야합니까?
RecyclerView는 LayoutManager를 사용하여 항목을 정렬합니다. 3 개의 LayoutManager 클래스가 있습니다.
애니메이션
ListView에는 기본 애니메이션이 없습니다. 그러나 RecyclerView에는 간단한 애니메이션이 제공됩니다.
분할기
안드로이드 : 분할 및 안드로이드 : dividerHeight 속성 또는 setDivider ()는 setDividerHeight는 ()는 ListView를 사용자 정의 분할 할 수 있습니다.
25.1.0 이후, 당신은 사용할 수 있습니다 DividerItemDecoration을 간단한 디바이더를 만들기 위해 클래스.
클릭 이벤트
RecyclerView에는 OnItemClickListener 가 없습니다 . 그렇습니다. 매우 슬프습니다. 그러나 RecyclerView.OnItemTouchListener 를 제공하여 개발자에게 더 많은 제어권을 부여 합니다.
알림 방법
올바른 애니메이션을 수행하려면 적절한 notify * 메소드를 호출해야합니다. RecylcerView에는 ListView와 비교할 때 notify * 메소드가 많이 있습니다.
제 생각에는 목록보기에 RecyclerView
사용 된 재활용 패턴의 문제를 해결하기 위해 개발자의 삶을 어렵게 만들었습니다. 다른 모든 것들은 더 많거나 적을 수 있습니다. 예를 들어 나는에 대해 동일한 어댑터를 사용 ListView
하고 GridView
는 모두 조회 수에 상관 없습니다 getView
, getItemCount
, getTypeCount
이 같은 그래서 사용된다.
그리드 어댑터를 사용 하거나 사용 RecyclerView
하는 경우 이미 필요하지 않습니다 . 목록보기에서 패턴을 올바르게 구현하면에 비해 크게 개선되지 않습니다 .ListView
ListAdapter
GridView
ViewHolder
RecycleView
나는 조금 함께 일 RecyclerView
했지만 여전히 선호합니다 ListView
.
물론, 둘 다 사용 ViewHolders
하므로 이점이 없습니다.
A RecyclerView
는 코딩이 더 어렵다.
A RecyclerView
에는 머리글과 바닥 글이 포함되어 있지 않으므로 빼기입니다.
A ListView
는 ViewHolder를 만들 필요가 없습니다. 섹션이나 하위 헤더가있는 목록을 원하는 경우 (ViewHolder없이) 독립적 인 항목을 만드는 것이 좋습니다. 별도의 클래스가 필요하지 않습니다.
간단한 대답 : 많은 항목을 표시하려는 경우 RecyclerView를 사용해야하며 그 수는 동적입니다. ListView는 항목 수가 항상 동일하고 화면 크기로 제한된 경우에만 사용해야합니다.
안드로이드 라이브러리를 염두에두고 생각하기 때문에 더 어려워집니다.
오늘날에는 자체 어댑터를 빌드하는 데 도움이되는 많은 옵션이 있으며, 선택, 재정렬, 애니메이션, 구분선 사용, 바닥 글, 헤더 등을 추가 할 수있는 동적 항목의 목록 및 그리드를 쉽게 작성할 수 있습니다.
겁내지 말고 RecyclerView를 사용해보십시오. 웹에서 다운로드 한 100 가지 항목 (Facebook 뉴스와 같은)을 ListView와 RecyclerView에서 만드는 것을 좋아할 수 있습니다 .UX (사용자)의 차이점을 볼 수 있습니다 경험) 스크롤하려고하면 테스트 앱이 중지되기 전에 중지 할 수 있습니다.
쉬운 어댑터를 만들기 위해이 두 라이브러리를 확인하는 것이 좋습니다.
리사이클 러보기 정보
이 RecyclerView
도입되었습니다 Android 5.0 (Lollipop)
. 지원 라이브러리에 포함되어 있습니다. . 따라서 Android API 레벨 7과 호환됩니다.
마찬가지로으로 ListView
, RecyclerView’s
주요 아이디어는 성능 친화적 인 방식으로 기능을 목록으로 제공하는 것입니다. 이 뷰 이름의 '리사이클 러'부분은 우연의 일치가 아닙니다. 는 RecyclerView
실제로 현재 일하고있는 항목을 재활용 할 수 있습니다. 재활용 프로세스는 View Holder 라는 패턴 덕분에 수행됩니다 .
RecyclerView의 장단점
장점 :
단점 :
목록보기 정보
은 ListView
매우 안드로이드의 시작 이후 주변왔다. 그것은 심지어 사용할 수 API Level 1
있으며 그것은 같은 목적을 가지고RecyclerView
있습니다.
ListView의 사용법은 실제로 매우 간단합니다. 이러한 측면에서 후계자와는 다릅니다. 학습 곡선은 RecyclerView의 학습 곡선보다 부드럽습니다. 따라서 파악하기가 더 쉽습니다. LayoutManager, ItemAnimator 또는 DiffUtil과 같은 것을 처리 할 필요가 없습니다.
ListView의 장단점
장점 :
ExpandableListView
단점 :