IT 개발/Android

[안드로이드] RecyclerView 사용법 (리사이클러뷰)

KADOSHOLY 2021. 12. 29. 03:00
반응형

 

RecyclerView 사용법 (리사이클러뷰)

 

 

RecyclerView는 대량의 데이터를 효율적으로 화면에 나타내기 위해서, 각 아이템을 목록형태로 화면에 나타내는데 사용됩니다. 

ListView와 유사하나 아래와 같은 성능개선과 유연함으로 ListView 업그레이드 버전으로 많이 사용됩니다. 

 

1) ViewHolder 패턴을 기본적으로 구현하도록 하여 스크롤시에 뷰를 재사용함.

2) LayoutManager를 통해서 각 아이템의 배치를 수직, 수평, 격자 등 다양하게 배치할 수 있음.

 

 

 

※ RecyclerView 구현방법 요약

 

1. RecyclerView를 담을 Layout 작성 (activity_main.xml)

2. 각 아이템 View 구성을 위한 Layout 작성 (recyclerview_item.xml)

3. RecyclerView 어댑터와 ViewHolder 구현 (CustomAdapter.java)

4. LayoutManager객체와 RecyclerView 어댑터 객체 생성 후 연결 (MainActivity.java)

 

 

예제) RecyclerView로 데이터 목록 나타내기

 

RecyclerView 구현 예제

 

1. RecyclerView를 담을 Layout 작성

 

RecyclerView를 담을 Main Activity의 Layout를 작성합니다. 

 

- activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="RecyclerView 테스트"
        android:textSize="32dp"
        android:textColor="#FFFFFFFF"
        android:padding="8dp"
        android:background="#FF3F3F3F"
        android:gravity="center"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

 

 

 

2. 각 아이템 View 구성을 위한 Layout 작성 

 

RecyclerView안에 표현될 각 아이템의 화면 구성을 위한 Layout를 작성합니다. 

 

- recyclerview_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@mipmap/ic_launcher"/>
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:textSize="24dp"
        android:text="text"/>
</LinearLayout>

 

 

 

3. RecyclerView 어댑터와 ViewHolder 구현

 

어댑터와 뷰홀더를 구현해줍니다.

어댑터 구현시 생성자를 통해서 데이터를 전달받도록 하고 아래의 세가지 메서드를 재정의 합니다. 

1) onCreateViewHolder() : ViewHolder 객체를 생성하고 초기화 합니다. 

2) onBindViewHolder() : 데이터를 가져와 ViewHolder안의 내용을 채워줍니다. 

3) getItemCount() : 총 데이터의 갯수를 반환하도록 합니다. 

 

- CustomAdapter.java

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>{

    private ArrayList<String> localDataSet;

    //===== 뷰홀더 클래스 =====================================================
    public static class ViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
        public TextView getTextView() {
            return textView;
        }
    }
    //========================================================================

    //----- 생성자 --------------------------------------
    // 생성자를 통해서 데이터를 전달받도록 함
    public CustomAdapter (ArrayList<String> dataSet) {
        localDataSet = dataSet;
    }
    //--------------------------------------------------

    @NonNull
    @Override   // ViewHolder 객체를 생성하여 리턴한다.
    public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.recyclerview_item, parent, false);
        CustomAdapter.ViewHolder viewHolder = new CustomAdapter.ViewHolder(view);

        return viewHolder;
    }

    @Override   // ViewHolder안의 내용을 position에 해당되는 데이터로 교체한다.
    public void onBindViewHolder(@NonNull CustomAdapter.ViewHolder holder, int position) {
        String text = localDataSet.get(position);
        holder.textView.setText(text);
    }

    @Override   // 전체 데이터의 갯수를 리턴한다.
    public int getItemCount() {
        return localDataSet.size();
    }
}

 

 

 

4. LayoutManager객체와 RecyclerView 어댑터 객체 생성 후 연결

 

LayoutManage는 예제의 LinearLayoutManager말고도 아래의 3가지 중 선택하여 사용 가능합니다.

 

1) LinearLayoutManager

   ex) ~ = new LinearLayoutManager(this);

 

2) GridLayoutManager

   ex) ~ = new GridLayoutManager(this, 2);

 

3) StaggeredGridLayoutManager

   ex) ~ = new StaggeredGridLAyoutMAnager(3, StaggeredGridLayoutManager.VERTICAL);

 

 

- MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //===== 테스트를 위한 더미 데이터 생성 ===================
        ArrayList<String> testDataSet = new ArrayList<>();
        for (int i = 0; i<20; i++) {
            testDataSet.add("TEST DATA" + i);
        }
        //========================================================

        RecyclerView recyclerView = findViewById(R.id.recyclerView);

        //--- LayoutManager는 아래 3가지중 하나를 선택하여 사용 --- 
        // 1) LinearLayoutManager()
        // 2) GridLayoutManager()
        // 3) StaggeredGridLayoutManager() 
        //---------------------------------------------------------
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager((Context) this);
        recyclerView.setLayoutManager(linearLayoutManager);  // LayoutManager 설정

        CustomAdapter customAdapter = new CustomAdapter(testDataSet);
        recyclerView.setAdapter(customAdapter); // 어댑터 설정
    }
}

 

 

 

참고자료

 

https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko

 

RecyclerView로 동적 목록 만들기  |  Android 개발자  |  Android Developers

RecyclerView로 동적 목록 만들기   Android Jetpack의 구성요소 RecyclerView를 사용하면 대량의 데이터 세트를 효율적으로 표시할 수 있습니다. 개발자가 데이터를 제공하고 각 항목의 모양을 정의하면 R

developer.android.com

 

2021.12.30 - [IT 개발/Android] - [안드로이드] RecyclerView 업데이트 및 갱신 방법

 

[안드로이드] RecyclerView 업데이트 및 갱신 방법

RecyclerView 업데이트 및 갱신 방법 RecyclerView의 아이템 내용이 변경되거나 아이템이 추가/이동/삭제 되었을 경우 RecyclerView에 반영하는 방법에 대해서 알아보고자 합니다. RecyclerView를 업데이트 및

kadosholy.tistory.com

 

2022.01.15 - [IT 개발/Android] - [안드로이드] RecyclerView 클릭 이벤트 구현하기

 

[안드로이드] RecyclerView 클릭 이벤트 구현하기

RecyclerView 클릭 이벤트 구현하기 RecyclerView를 구현하고 나면 상황에 따라서 각 아이템을 클릭했을 때 여러가지 이벤트 처리를 해주어야 합니다. 이때 ListView의 setOnItemClickListener() 메소드와 같은

kadosholy.tistory.com

 

 

반응형