Android RecyclerView (안드로이드 리사이클러뷰) 사용 방법
Android/JAVA

Android RecyclerView (안드로이드 리사이클러뷰) 사용 방법

728x90

계속 미루고 미루던 RecyclerView 기본 사용 방법에 대해 소개해 보려고 합니다.

 

RecyclerView란?

 

'RecyclerView  위젯은 ListView가 더 진보하고 유연해진 버전입니다.'

 

출처: <https://developer.android.com/guide/topics/ui/layout/recyclerview>

 

Fragment 생성 시에 List라는 다른 생성 버튼도 있는  같은데 추후 따로 포스팅 하도록 하겠습니다.

이쪽에는 Android Developer 사이트에서 제공하는 Sample Code 예제입니다.

https://github.com/android/views-widgets-samples/tree/master/RecyclerView

 

 

일단 RecyclerView 사용하는 이유가 뭘까요?

그냥 ListView 사용해서 원래 쓰던 방식대로 사용하면 안 되나요?

 

RecyclerView ListView 차이점 대해 간단하게 설명해 드리겠습니다.

 

1. RecyclerView ViewHolder 패턴 사용

2.  Recyclerview layoutmanager로 수평, 수직 스크롤 구현이 쉽게 가능 ListView 수직 스크롤만 가능

3. ListView 아이템 삽입, 삭제에 대한 애니메이션이 없음 Recyclerview는 애니메이션 핸들링 또는 삽입, 삭제, 이동에 대한 커스터마이징 가능하다.

 

재사용과 메모리도 연관이 있다고 하더군요

 

그러면 구현 방법에 대해 소개해 드리겠습니다.

 

1. build.gradle ( Module: app)

일단 gradle에 추가해 주시고

1
2
3
4
5
dependencies {
    ..
    implementation 'androidx.recyclerview:recyclerview:1.1.0'  
}

2. activity_main.xml

xml 파일에 RecyclerView를 선언해서 넣어 줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    
    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recyclerView"/>


</androidx.constraintlayout.widget.ConstraintLayout>

그 이후에 우리는 저 리사이클 러뷰에 표현할 뷰를 생성해야 합니다.

레이아웃 파일을 하나 만들어 줍시다. 

 

3. main_holder_view.xml

저는 TextView 두 개를 생성하고 거기에 String 배열로 데이터를 넣어보겠습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">


    <TextView
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />


    <TextView
        android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>

 

그 이후에 연결할 Adapter를 하나 생성합시다. 이름은 MainAdapter입니다. 

 

4. MainAdapter.java

일단 MainActivity에서 받아 오는 데이터를 처리할 수 있는 생성자를 하나 구현해 줍니다.

그 이후에 3번에서 만들었던, main_holder_view를 onCreateViewHolder에 선언해 주고 

그 xml에 있는 view의 textView를 가져와서 다시 선언해 줍니다.

 

Adapter에서는 View를 생성하고, Holder에서는 화면에 표시하는 뷰를 저장하는 객체

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46


public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainHolder> {
    private String[] main_text, main_text2;
    MainHolder mainHolder;


    // 생성자
    public MainAdapter(String[] main_text, String[] main_text2){
        this.main_text = main_text;
        this.main_text2 = main_text2;


    }


    public static class MainHolder extends  RecyclerView.ViewHolder{


        public TextView main_text, main_text2;


        public MainHolder(View view){
            super(view);
            this.main_text = view.findViewById(R.id.text1);
            this.main_text2 = view.findViewById(R.id.text2);
        }
    }
    @NonNull
    @Override
    public MainHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View holderView = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_holder_view, parent, false);
        mainHolder = new MainHolder(holderView);


        return mainHolder;
    }


    @Override
    public void onBindViewHolder(@NonNull MainHolder mainHolder, int i) {
        mainHolder.main_text.setText(this.main_text[i]);
        mainHolder.main_text2.setText(this.main_text2[i]);




    }


    @Override
    public int getItemCount() {
        return main_text.length;


    }


}

 

5. MainActivity.java

마지막으로 MainActivity에 String 배열을 만들어 주고 adapter을 선언해주면 끝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27


public class MainActivity extends AppCompatActivity {


    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    RecyclerView.Adapter adapter;


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


        recyclerView = findViewById(R.id.recyclerView);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);


        String[] main_text =  {"코딩","하루"};
        String[] main_text2 =  {"test","test1"};


        adapter = new MainAdapter(main_text, main_text2);


        recyclerView.setAdapter(adapter);






    }
}

6. 결과 화면

이렇게 완료 후 빌드를 하게 되면 간단하게 RecyclerView를 구현한 것을 확인하실 수 있습니다. 

감사합니다. 

 

예제 코드 : https://github.com/wp01053/RecyclerView

View 안에 구분선 넣기가 궁금하다면 다음 포스트를 꼭 봐주세요! 

 

728x90