계속 미루고 미루던 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 안에 구분선 넣기가 궁금하다면 다음 포스트를 꼭 봐주세요!
'Android > JAVA' 카테고리의 다른 글
Android Retrofit2 (안드로이드 레트로핏) 사용방법 (11) | 2020.03.20 |
---|---|
Android DataBinding (안드로이드 데이터 바인딩) 사용 방법 (0) | 2020.03.16 |
Android Floating Action Button 사용하기 (2) | 2019.01.24 |
Android 여러가지 Button 사용방법 (1) | 2019.01.23 |
Android SharedPreferences 사용 방법 (2) | 2019.01.23 |