반응형
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);
프로젝트 소스 다운↓↓↓
반응형
'안드로이드' 카테고리의 다른 글
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 |
최근댓글