1. 뷰 홀더
ListView에서 뷰 홀더를 정의하는 것이 뷰에 대한 참조를 유지하기위한 제안 된 방법입니다. 그러나 그것은 강제가 아니었다. 그렇게하지 않아도 ListView는 오래된 데이터를 표시합니다. 뷰 홀더를 사용하지 않는 데 따른 또 다른 주요 단점은 매번 ID별로 뷰를 찾는 작업이 많이 발생할 수 있습니다. 결과적으로 지연된 ListView가 발생했습니다.
이 문제는 RecylerView에서 RecyclerView.ViewHolder 클래스를 사용하여 해결됩니다. 이것이 RecyclerView와 ListView의 주요 차이점 중 하나입니다. RecyclerView를 구현할 때이 클래스는 ViewHolder를 위치와 바인딩하기 위해 어댑터에서 사용하는 ViewHolder 객체를 정의하는 데 사용됩니다. 여기서 주목해야 할 또 다른 요점은 RecyclerView 용 어댑터를 구현하는 동안 ViewHolder를 제공하는 것이 필수적이라는 것입니다. 이를 통해 구현이 약간 복잡해 지지만 ListView에서 직면 한 문제를 해결합니다.
2. 레이아웃 관리자
ListView에 대해 말할 때 세로 ListView와 같은 한 가지 유형의 ListView 만 사용할 수 있습니다. 가로 스크롤로 ListView를 구현할 수 없습니다. 가로 스크롤을 구현하는 방법이 있지만 그 방식으로 작동하도록 설계되지 않았다고 생각합니다.
그러나 이제 Android RecyclerView와 ListView를 살펴볼 때 수평 컬렉션도 지원합니다. 실제로 여러 유형의 목록을 지원합니다. 여러 유형의 목록을 지원하기 위해 RecyclerView.LayoutManager 클래스를 사용합니다. 이것은 ListView에없는 새로운 것입니다. RecyclerView는 세 가지 유형의 사전 정의 된 레이아웃 관리자를 지원합니다.
LinearLayoutManager – RecyclerView의 경우 가장 일반적으로 사용되는 레이아웃 관리자입니다. 이를 통해 가로 및 세로 스크롤 목록을 모두 만들 수 있습니다. StaggeredGridLayoutManager –이 레이아웃 관리자를 통해 엇갈린 목록을 만들 수 있습니다. Pinterest 화면처럼. GridLayoutManager –이 레이아웃 관리자는 모든 사진 갤러리와 같이 격자를 표시하는 데 사용할 수 있습니다.
3. 아이템 애니메이터
목록의 애니메이션은 완전히 새로운 차원이며 무한한 가능성이 있습니다. ListView에는 항목을 애니메이션, 추가 또는 삭제할 수있는 특수한 조항이 없습니다. 나중에 안드로이드가 진화함에 따라 ListProperty의 애니메이션에 대한이 비디오 자습서에서 Google의 Chet Haase가 ViewPropertyAnimator를 제안했습니다.
반면 Android RecyclerView와 ListView를 비교하면 애니메이션 처리를위한 RecyclerView.ItemAnimator 클래스가 있습니다. 이 클래스를 통해 항목 추가, 삭제 및 이동 이벤트에 대한 사용자 정의 애니메이션을 정의 할 수 있습니다. 또한 사용자 정의가 필요하지 않은 경우 DefaultItemAnimator를 제공합니다.
4. 어댑터
ListView 어댑터는 구현이 간단했습니다. 그들은 모든 마술이 일어났던 주요 방법 인 getView를 가졌습니다. 뷰가 위치에 바인딩 된 위치 또한 어댑터에서 관찰자를 바로 설정할 수있는 흥미로운 메소드 registerDataSetObserver를 사용했습니다. 이 기능은 RecyclerView에도 있지만 RecyclerView.AdapterDataObserver 클래스가 사용됩니다. 그러나 ListView의 장점은 세 가지 기본 어댑터 구현을 지원한다는 것입니다.
ArrayAdapter CursorAdapter SimpleCursorAdapter RecyclerView 어댑터는 DB 커서 및 ArrayList에 대한 기본 지원을 제외하고 ListView 어댑터가 가진 모든 기능을 갖습니다. 현재 RecyclerView.Adapter에서는 어댑터에 데이터를 제공하기 위해 사용자 정의 구현을 작성해야합니다. BaseAdapter가 ListViews와 마찬가지로. RecyclerView 어댑터 구현에 대한 자세한 내용은 Android RecyclerView 예를 참조하십시오.
5. 데이터 변경 알림
ListView로 작업 할 때 데이터 세트가 변경되면 기본 어댑터의 notifyDataSetChanged 메소드를 호출하여 데이터를 새로 고쳐야합니다. notifyDataSetChanged 메소드를 자동으로 호출하려는 경우 setNotifyOnChange 메소드를 true로 설정하십시오. 그러나 두 경우 모두 목록에 나오는 결과는 매우 무겁습니다. 기본적으로 목록보기를 새로 고칩니다.
그러나 RecyclerView 어댑터와 달리 단일 항목 또는 항목 범위가 변경된 경우 그에 따라 변경 사항을 알리는 방법이 있습니다. 각각 notifyItemChanged 및 notifyItemRangeChanged이며 다음과 같습니다.
notifyItemInsterted notifyItemMoved notifyItemRangeInsterted notifyItemRangeRemoved 물론 전체 목록을 새로 고치는 원래 메소드가 있습니다. 즉 notifyDataSetChanged는 적응 된 전체 데이터 세트가 변경되었음을 알립니다.
6. 아이템 장식
ListView에 사용자 지정 구분선을 표시하기 위해 ListView XML에 이러한 매개 변수를 쉽게 추가 할 수 있습니다.
XHTML android : divider = "@ android : color / transparent"android : dividerHeight = "5dp"1 2 android : divider = "@ android : color / transparent"android : dividerHeight = "5dp"Android RecyclerView의 흥미로운 부분은 현재로서는 기본적으로 항목 사이에 구분선이 표시되지 않습니다. Google 직원은 의도적으로 맞춤 설정을 위해이 기능을 생략해야합니다. 그러나 이것은 개발자의 노력을 크게 증가시킵니다. 항목 사이에 구분선을 추가하려면 RecyclerView.ItemDecoration 클래스를 사용하여 사용자 지정 구현을 수행해야 할 수 있습니다.
또는 공식 샘플에서이 파일을 사용하여 해킹을 적용 할 수 있습니다 : DividerItemDecoration.java
7. OnItemTouchListener
클릭 감지를위한 간단한 구현, 예를 들어 AdapterView.OnItemClickListener 인터페이스를 사용하여 목록보기를 사용했습니다.
그러나 반면 RecyclerView.OnItemTouchListener 인터페이스는 Android RecyclerView에서 터치 이벤트를 감지하는 데 사용됩니다. 구현이 약간 복잡하지만 터치 이벤트를 가로 채기 위해 개발자에게 더 큰 제어 기능을 제공합니다. 공식 문서에 따르면 제스처 이벤트가 RecyclerView에 전달되기 전에 터치 이벤트를 가로 채기 때문에 제스처 조작에 유용 할 수 있습니다.
RecyclerView
더 빠르고 더 나은 API와 다양한 정도입니다. 항목 추가 또는 제거 애니메이션과 같은 작업은 이미 수행RecyclerView
하지 않아도 이미 구현되어 있습니다. 그것에 대해 의문의 여지가 없습니다, 당신ListView
의 쓰레기통에 던져 ,RecyclerView
여기 쇼를 훔칠 수 있습니다 .