728x90
반응형
💡 리사이클러뷰(RecyclerView)
"사용자가 관리하는 많은 수의 데이터 집합(Data Set)을 개별 아이템 단위로 구성하여 화면에 출력하는 뷰그룹(ViewGroup)이며, 한 화면에 표시되기 힘든 많은 수의 데이터를 스크롤 가능한 리스트로 표시해주는 위젯"입니다.
기존에 리스트 형태의 화면 구성에 사용되던 리스트뷰(ListView)에 "유연함(Flexibility) "과 "성능(Performance)"을 더한, 리스트뷰의 확장판 또는 개선판이라고 볼 수 있습니다.
사용 예시!
- 나타낼 Activity(xml)에 RecyclerView등록
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvRankList"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="30dp"
android:scrollbarFadeDuration="0"
android:scrollbarSize="5dp"
android:scrollbarThumbVertical="@android:color/darker_gray"
android:scrollbars="vertical"
android:layout_weight="1">
</androidx.recyclerview.widget.RecyclerView>
- 리스트 아이템(xml) 생성 - 아이템 하나의 구조
<?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:layout_marginBottom="3dp"
android:background="@drawable/radius_boder_layout">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivUserProfile"
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/tvUserPoint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:textSize="9pt"
android:text="3254"/>
</LinearLayout>
</LinearLayout>
- 리스트 아이템 데이터 생성 - 각각의 아이템에 들어갈 데이터를 정의 (constructor, getter&setter)
public class RankListData {
private String tvUserRank;
private int ivUserProfile;
public RankListData(String tvUserRank, int ivUserProfile) {
this.tvUserRank = tvUserRank;
this.ivUserProfile = ivUserProfile;
}
public String getTvUserRank() {
return tvUserRank;
}
public void setTvUserRank(String tvUserRank) {
this.tvUserRank = tvUserRank;
}
public int getIvUserProfile() {
return ivUserProfile;
}
public void setIvUserProfile(int ivUserProfile) {
this.ivUserProfile = ivUserProfile;
}
}
- 리스트 어댑터 등록
public class RankListAdapter extends RecyclerView.Adapter<RankListAdapter.CustomViewHolder> {
private ArrayList<RankListData> arrayList;
public RankListAdapter(ArrayList<RankListData> arrayList) {
this.arrayList = arrayList;
}
@NonNull
@Override
public RankListAdapter.CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// 리스트가 생성될 때 호출 (생명주기)
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.ranklist_item, parent, false);
CustomViewHolder holder = new CustomViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RankListAdapter.CustomViewHolder holder, int position) {
// 리스트가 실제 실행될 때 호출
holder.tvUserRank.setText(arrayList.get(position).getTvUserRank());
holder.ivUserProfile.setImageResource(arrayList.get(position).getIvUserProfile());
holder.itemView.setTag(position);
// 클릭 이벤트는 필요없음.
}
@Override
public int getItemCount() {
return (null != arrayList ? arrayList.size() : 0);
}
public class CustomViewHolder extends RecyclerView.ViewHolder {
protected TextView tvUserRank;
protected ImageView ivUserProfile;
protected TextView tvUserId;
protected TextView tvUserPoint;
public CustomViewHolder(@NonNull View itemView) {
super(itemView);
this.tvUserRank = (TextView) itemView.findViewById(R.id.tvUserRank);
this.ivUserProfile = (ImageView) itemView.findViewById(R.id.ivUserProfile);
}
}
}
- 마지막으로 나타낼 Activity의 JAVA코드에서 리스트 설정 및 값 세팅
// List 설정
recyclerView = (RecyclerView) rootView.findViewById(R.id.rvRankList);
linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
arrayList = new ArrayList<>();
mainAdapter = new RankListAdapter(arrayList);
recyclerView.setAdapter(mainAdapter);
// list값 세팅
for(int i=1;i<=100;i++){
RankListData mainData = new RankListData(""+i, R.drawable.user, "Leeinbeom", ""+24397);
arrayList.add(mainData);
}
mainAdapter.notifyDataSetChanged();
728x90
반응형
'🌐OS > AOS' 카테고리의 다른 글
[AndroidStudio] PHP 외부 DB연결 (0) | 2023.08.20 |
---|---|
[AndroidStudio] TMap API (0) | 2023.08.20 |
[AndroidStudio] SQLite (0) | 2023.08.20 |
[AndroidStudio] Fragment (0) | 2023.08.20 |
[AndroidStudio] 에러 노트 (0) | 2023.08.20 |