반응형



1. 리스트 형식
- 2가지 형태의 셀을 가지는 리스트
app build.gradle
implementation 'androidx.recyclerview:recyclerview:1.1.0'
선언부
RecyclerView recycler; LinearLayoutManager linearLayoutManager; MyListAdapter adapter; ArrayList<DataType> datas;
초기화, 리스트 데이터 생성
recycler = findViewById(R.id.recycler); linearLayoutManager = new LinearLayoutManager(this); adapter = new MyListAdapter(); recycler.setLayoutManager(linearLayoutManager); recycler.setAdapter(adapter); //테스트 데이터 datas = new ArrayList<>(); for(int i=0; i<100; i++) { if(i % 2 == 0) { datas.add(new DataType1(i)); } else { datas.add(new DataType2(i + "")); } }
데이터 클래스
class DataType {} class DataType1 extends DataType { int num = 0; public DataType1(int num) { this.num = num; } } class DataType2 extends DataType { String str = ""; public DataType2(String str) { this.str = str; } }
Adapter
public class MyListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private int VIEWTYPE_1 = 0; private int VIEWTYPE_2 = 1; public class Type1ViewHolder extends RecyclerView.ViewHolder { TextView tv_num; public Type1ViewHolder(View view) { super(view); this.tv_num = view.findViewById(R.id.tv_num); } } public class Type2ViewHolder extends RecyclerView.ViewHolder { TextView tv_str; public Type2ViewHolder(View view) { super(view); this.tv_str = view.findViewById(R.id.tv_str); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { if(viewType == VIEWTYPE_1) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_type1, viewGroup, false); Type1ViewHolder viewHolder = new Type1ViewHolder(view); return viewHolder; } else { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_type2, viewGroup, false); Type2ViewHolder viewHolder = new Type2ViewHolder(view); return viewHolder; } } @Override public int getItemViewType(int position) { if(datas.get(position).getClass().getName().equals(DataType1.class.getName())) { return VIEWTYPE_1; } else { return VIEWTYPE_2; } } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewholder, int position) { //VIEWTYPE_1 if(datas.get(position).getClass().getName().equals(DataType1.class.getName())) { DataType1 dataType1 = (DataType1)datas.get(position); ((Type1ViewHolder)viewholder).tv_num.setText(dataType1.num + ""); } //VIEWTYPE_2 else { DataType2 dataType2 = (DataType2)datas.get(position); ((Type2ViewHolder)viewholder).tv_str.setText(dataType2.str); } } @Override public int getItemCount() { return (null != datas ? datas.size() : 0); } }
activity.xml
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent"/>
layout_type1.xml, layout_type2.xml
<!-- layout_type1 --> <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="#88ffff" android:layout_margin="1dp"> <TextView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </FrameLayout> <!-- layout_type2 --> <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:background="#ff88ff" android:layout_margin="1dp"> <TextView android:id="@+id/tv_str" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </FrameLayout>
2. 그리드 형식
- 셀의 형식이 2개이면 높이는 그 중에서 큰걸로 결정
그리드 레이아웃 매니져 생성 및 사용
GridLayoutManager gridLayoutManager; gridLayoutManager = new GridLayoutManager(this, 3); recycler.setLayoutManager(gridLayoutManager);
3. 스태그 그리드 형식
스태그 그리드 레이아웃 매니져 생성 및 사용
StaggeredGridLayoutManager staggeredGridLayoutManager; staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); recycler.setLayoutManager(staggeredGridLayoutManager);
프로젝트 소스 다운↓↓↓
RecyclerView.zip
0.51MB
반응형
'안드로이드' 카테고리의 다른 글
Android Version List (1) | 2021.11.14 |
---|---|
Android RecyclerView StaggeredGrid (0) | 2021.11.14 |
TextView Center Line(취소선, 텍스트 중간에 줄긋기 옵션) (0) | 2017.11.24 |
RoundRect Background xml 만들기 (0) | 2017.11.23 |
Android EditText 변경 이벤트 받기(ListView, RecyclerView 안에서도 받기) (0) | 2017.11.23 |
최근댓글