일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- textview
- SK와이번스
- divider
- diskCacheStrategy
- 이마트프랜들리존
- Linux
- setStyle
- 인천SK행복드림구장
- 인천 논현동
- 땀땀
- RecyclerView
- Java
- 조동화선수
- 게스트 확장
- Android
- 조동화 은퇴식
- 버추얼박스
- 정보처리기사
- CentOS 7
- VirtualBox
- 우삼겹 쌀국수
- 리눅스
- 안드로이드
- 인천 맛집
- skipMemoryCache
- KIA타이거즈
- 행복라이브존
- 인천SK와이번스
- 1루 응원지정석
- 문학야구장
- Today
- Total
쭌2 블로그
[안드로이드/Android] RecyclerView 사용하기(1) 본문
기존의 ListView는 구조적인 문제로 커스터마이징 하기에 많은 제약이 따랐고 성능 관리에도 어려움이 많았습니다. 이런 ListView의 고질적인 문제들을 해결하기 위해 탄생한 것이 바로 RecyclerView입니다. RecyclerView는 개발자가 더 다양한 형태로 커스터마이징 할 수 있도록 유연하고 성능에 더 중점을 두어 만들어졌습니다.
좋은 것이 나왔으니 한번 써봐야겠죠? 간단한 예제를 통해서 RecyclerView의 사용 방법에 대해 알아보겠습니다.
1. 라이브러리 추가
먼저 gradle에 라이브러리를 추가해줍니다.
dependencies {
implementation 'com.android.support:recyclerview-v7:27.1.1'
}
2. activity_main.xml
ReyclerView를 출력한 메인 레이아웃을 작성합니다.
<?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="match_parent"
android:background="@color/white"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/layout_toolbar_main" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
3. item_main.xml
RecyclerView를 구성할 아이템 레이아웃을 작성합니다.
<?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:background="@color/white"
android:orientation="vertical"
android:padding="@dimen/padding_20">
<TextView
android:id="@+id/textTitle1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/recycler_view_example1"
android:textColor="@color/text_black"
android:textSize="@dimen/text_medium_18"
android:textStyle="bold" />
<TextView
android:id="@+id/textTitle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_5"
android:text="@string/recycler_view_example2"
android:textColor="@color/text_black"
android:textSize="@dimen/text_small_14" />
</LinearLayout>
4. MainItem.java
RecyclerView를 구성할 아이템의 데이터를 담을 객체를 생성합니다.
public class MainItem {
private String title1;
private String title2;
public MainItem(String title1, String title2) {
this.setTitle1(title1);
this.setTitle2(title2);
}
public String getTitle1() {
return title1;
}
public void setTitle1(String title1) {
this.title1 = title1;
}
public String getTitle2() {
return title2;
}
public void setTitle2(String title2) {
this.title2 = title2;
}
}
5. MainAdapter.java
아이템 데이터를 RecyclerView와 연결해 줄 Adapter를 생성합니다.
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ItemViewHolder> {
private ArrayList<MainItem> mItems;
public MainAdapter(ArrayList<MainItem> items) {
mItems = items;
}
// 뷰 홀더 생성해 아이템 레이아웃을 저장합니다.
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main,
parent, false);
return new ItemViewHolder(v);
}
// ListView의 getView와 비슷합니다.
// 데이터를 각각 해당하는 뷰 홀더와 포지션에 넘겨주는 역할을 합니다.
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
holder.textTitle1.setText(mItems.get(position).getTitle1());
holder.textTitle2.setText(mItems.get(position).getTitle2());
}
@Override
public int getItemCount() {
return mItems.size();
}
// 뷰 재활용을 위한 뷰 홀더
class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView textTitle1;
private TextView textTitle2;
public ItemViewHolder(View itemView) {
super(itemView);
textTitle1 = (TextView) itemView.findViewById(R.id.textTitle1);
textTitle2 = (TextView) itemView.findViewById(R.id.textTitle2);
}
}
}
6. MainActivity.java
이제 마지막으로 RecyclerView를 이용해 화면에 리스트를 출력할 Activity를 작성합니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
// RecyclerView를 구성할 데이터를 생성합니다.
ArrayList<MainItem> mainItems = new ArrayList<>();
for (int i = 0; i < 20; i++) {
MainItem mainItem = new MainItem("Title", "Subtitle");
mainItems.add(mainItem);
}
// 각 Item 들이 RecyclerView 의 전체 크기를 변경하지 않는 다면
// setHasFixedSize() 함수를 사용해서 성능을 개선할 수 있습니다.
// 변경될 가능성이 있다면 false 로 , 없다면 true를 설정해주세요.
recyclerView.setHasFixedSize(true);
// RecyclerView에 Adapter를 설정해줍니다.
MainAdapter mainAdapter = new MainAdapter(mainItems);
recyclerView.setAdapter(mainAdapter);
// 다양한 LayoutManager 가 있습니다. 원하시는 방법을 선택해주세요.
// 지그재그형의 그리드 형식
//mainBinding.recyclerView.setLayoutManager(
// new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
// 그리드 형식
//mainBinding.recyclerView.setLayoutManager(new GridLayoutManager(this,4));
// 가로 또는 세로 스크롤 목록 형식
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
}
}
7. 결과
다음 관련 글
[안드로이드/Android] RecyclerView 사용하기(2) - Add dividers to RecyclerView
[안드로이드/Android] RecyclerView 사용하기(3) - Add left and right margin to dividers
[안드로이드/Android] RecyclerView 사용하기(4) - Add header and footer layouts
'IT > Android' 카테고리의 다른 글
[안드로이드/Android] RecyclerView 사용하기(3) - Add left and right margin to dividers (0) | 2018.08.18 |
---|---|
[안드로이드/Android] getDimension(), getDimensionPixelSize() 함수 차이점 (0) | 2018.08.13 |
[안드로이드/Android] RecyclerView 사용하기(2) - Add dividers to RecyclerView (0) | 2018.08.06 |
[안드로이드/Android] setOnTabSelectedListener is depreated (0) | 2018.08.06 |
[안드로이드/Android] TextUtils를 이용하여 String값 null 또는 비어있는지 체크하기 (0) | 2018.08.02 |