Android

[Android] ListView(리스트뷰)와 RecyclerView(리사이클러뷰)

poppy 2020. 9. 21. 19:31
반응형

ListView

리스트뷰는 목록을 구현하는 것입니다. 간단하게 리스트를 만들 수 있어서 편리합니다. 간단한 아이템으로 구성된 리스트뷰를 만드는 경우에는 ArrayAdapter가 제공되어서 빠르게 적용할 수 있습니다. 하지만 아이템의 애니메이션 처리가 쉽지 않습니다. ViewHolder패턴을 강제적으로 사용하지 않아서 findViewById를 매번 호출해야 합니다. 리스트뷰는 리스트 항목이 갱신될 때마다 매번 아이템뷰를 새로 구성해야하는 단점이 있습니다. 그래서 많은 데이터의 집합을 표시하는 것에서 성능 저하를 일으키는 원인이 됩니다. 

 

protected void onCreate(Bundle savedInstanceState) {
        //코드생략

        ListView listview = (ListView)findViewById(R.id.listview);
        List<String> list = new ArrayList<>();
        list.add("10");
        list.add("20");
        list.add("30");
        list.add("40")

        //어댑터 생성/지정
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
        listview.setAdapter(adapter);
}

RecyclerView

리사이클러뷰는 리스트의 개선판이라고 볼 수 있습니다. 그래서 리사이클러뷰의 이름에서도 볼 수 있듯이 아이템을 표시하기 위해 생성한 뷰를 재활용합니다. 기본적으로 ViewHolder패턴과 Layout Manager를 사용하도록 되어있습니다. 리사이클러뷰는 리스트뷰와 다르게 가로와 세로 레이아웃을 모두 구현할 수 있고, 상하스크롤과 좌우스크롤 모두 가능합니다. "유연함"이 장점이기 때문에 리스트뷰보다 다양한 형태로 커스터마이징을 하기 쉽습니다. 

출처: https://recipes4dev.tistory.com

위의 그림은 리사이클러뷰의 각 구성 요소가 어떤 구조로 처리되는지 보여주는 그림입니다. Adapter는 데이터 목록을 아이템 단위의 뷰로 구성하여 생성합니다. Layout Manager는 아이템뷰가 나열되는 형태를 관리합니다. 어댑터를 통해 만들어진 아이템 뷰들은 ViewHoler 객체에 저장되어 화면에 표시됩니다. 

protected void onCreate(Bundle savedInstanceState) {
        //코드 생략

        RecyclerView recyclerview = findViewById(R.id.recyclerview) ;
        ArrayList<String> list = new ArrayList<>();
        list.add("10");
        list.add("20");
        list.add("30");
        list.add("40");
 
        //레이아웃매니저 지정
        recyclerView.setLayoutManager(new LinearManager(this)) ;

        //어댑터 생성/지정
        SimpleTextAdapter adapter = new SimpleTextAdapter(list) ;
        recyclerview.setAdapter(adapter) ;
    }

비교

  ListView RecyclerView
ViewHolder 강제적으로 사용하지 않음 사용이 의무화되어있음
Item Layout 세로 방향만 가능 가로,세로,지그재그 방향 모두 가능
Item Animation 없음 있음
Adapter ArrayAdapter, CursorAdapter 같은 어댑터가 존재함 데이터를 제공하기 위한 사용자 정의 구현이 필요함
Click Detection 아이템의 클릭이벤트가 지원되기 때문에 AdpaterView.OnItemClickListener 인터페이스가 존재 개별 터치 이벤트를 관리하지만 클릭 처리 기능이 내장되어 있지 않음

 

반응형