코드네임 :
📱 모바일프로그래밍 - 리사이클러뷰 예제 - 📱 본문
// Example8_1
// RecylclerViewAdapter.java
// RecyclerViewAdapter는 RecyclerView.Adapter를 상속받아 구현됨
/// 여기서 RecyclerView.Adapter의 제네릭 타입은 ViewHolder!!!
public class RecyclerViewAdapter extends RecyclerView.Adapter <RecyclerViewAdapter.ViewHolder>{
private Context context; //어댑터가 실행되는 환경(Context)을 참조하기 위한
private List<String> items; //RecyclerView에 표시할 데이터를 담은 리스트
// 멤버변수 초기화
/// context와 items를 전달받아 어댑터 내부에서 사용할 수 있도록 멤버 변수에 저장
public RecyclerViewAdapter(Context context, List<String> items){
this.context = context;
this.items = items;
}
@NonNull
@Override
//onCreateViewHolder : RecyclerView의 아이템 뷰를 생성하는 메서드, 화면에 표시할 개별 아이템 뷰를 준비
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// LayoutInflater.from(): XML 레이아웃 파일(R.layout.row_recyclerviewd이므로 row_recyclerview.xml)을 실제 뷰 객체로 변환
// parent.getContext(): 현재 RecyclerView의 컨텍스트를 가져옵
// inflate(): row_recyclerview xml레이아웃 파일을 itemview로 사용 !!!
View v = LayoutInflater .from(parent.getContext()).
inflate(R.layout.row_recyclerview, parent, false);
// return new ViewHolder(v) : 생성된 뷰(v)를 관리하기 위해 ViewHolder 객체를 반환
return new ViewHolder(v);
}
@Override
// 생성된 뷰에 데이터를 연결
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//현재 위치(position)의 데이터를 가져와 TextView에 설정
holder.text.setText(items.get(position));
//아이템 클릭 이벤트 처리. 클릭 시 현재 아이템의 위치를 Toast 메시지로 표시.
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "아이템클릭" + holder
.getAdapterPosition(),Toast.LENGTH_SHORT).show();
}
});
}
@Override
//RecyclerView에 표시할 아이템의 개수를 반환 (리스트의 크기를 반환함으로써)
public int getItemCount() {
return items.size();
}
//RecyclerView에서 개별 아이템 뷰를 관리
// ViewHolder: RecyclerView에서 각각의 아이템 뷰에 포함된 뷰(TextView, ImageView 등)를 저장하고 재사용하는 객체
// 이 클래스는 **RecyclerView.ViewHolder**를 상속받아야 함
// RecyclerView는 ViewHolder를 통해 뷰를 효율적으로 관리하고, 스크롤할 때 재사용(recycling)
static class ViewHolder extends RecyclerView.ViewHolder{ //내부 클래스
TextView text;
public ViewHolder(@NonNull View itemView) {
super(itemView);
text = itemView.findViewById(R.id.text);
//여기서 **itemView**는 row_recyclerview.xml 전체를 나타냅니다.
//findViewById(R.id.text)로 XML 안의 TextView를 가져옵니다.
}
// itemView : RecyclerView에서 한 개의 아이템 전체를 나타내는 뷰
///예를 들어, RecyclerView에 표시될 각 리스트 아이템의 레이아웃(XML 파일) 전체를 말합니다.
///즉, row_recyclerview.xml 파일에서 정의된 모든 뷰(TextView, ImageView 등)가 itemView에 포함됩니다.
////어디서 생성되나요?
////onCreateViewHolder 메서드에서 생성됩니다.
////여기에서 XML 레이아웃(row_recyclerview.xml)을 LayoutInflater를 통해 실제 화면에 표시할 뷰 객체로 변환합니다.
////변환된 결과가 바로 **itemView**입니다.
////어떤 역할을 하나요?
////RecyclerView는 이 itemView를 사용해 화면에 리스트 아이템을 표시합니다.
////예를 들어, itemView에 포함된 TextView, ImageView 등을 코드에서 접근할 때 사용합니다.
////ViewHolder 내부에서 itemView.findViewById()로 특정 뷰(TextView 등)를 가져올 수 있습니다.
////비유로 이해하기
//row_recyclerview.xml은 아이템의 설계도입니다.
//onCreateViewHolder에서 이 설계도를 사용해 실제 아이템 뷰(itemView)를 만듭니다.
//RecyclerView는 이 itemView를 화면에 추가하고, 관리합니다.
////간단 요약
//itemView = RecyclerView의 한 줄(아이템)의 전체 레이아웃입니다.
//ViewHolder는 이 itemView를 관리하면서, 안에 있는 뷰들(TextView 등)을 설정하거나 조작합니다.
}
#inside MainActivity.java,
# protected void onCreate(Bundle savedInstanceState) { ~ }); 다음
// XML 레이아웃 파일에 정의된 RecyclerView를 찾아 Java 코드에서 사용할 준비를 합니다.
RecyclerView recyclerView = findViewById(R.id.recyclerView);
//RecyclerView에 데이터를 표시하기 위해 **어댑터(Adapter)**를 설정
//this: 현재 Context(Activity)를 전달.
//createItemList(): RecyclerView에 표시할 데이터를 생성하는 메서드로, 20개의 아이템 리스트를 반환합니다.
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, createItemList());
//RecyclerView에 어댑터를 연결하여 데이터를 표시할 수 있게 합니다.
recyclerView.setAdapter((adapter));
// 레이아웃 매니저를 통해 RecyclerView의 레이아웃을 설정합니다.
LinearLayoutManager layoutManager
= new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
//RecyclerView에 어댑터를 연결하여 데이터를 표시할 수 있게 합니다
recyclerView.setLayoutManager(layoutManager);
}
// 20개의 String 데이터를 가진 리스트를 생성
private List<String> createItemList() {
List<String> items = new ArrayList<>();
for (int i = 0; i < 20; i++) {
items.add("아이템" + i);
}
return items;
}
'백엔드 > Android_JAVA' 카테고리의 다른 글
📱 모바일프로그래밍 - 뷰바인딩 📱 (0) | 2024.11.28 |
---|---|
📱 모바일프로그래밍 - 어댑터뷰 : 뷰페이저 (예제 포함 - 이건 시험기간에 적어봐라.,.)📱 (0) | 2024.11.21 |
📱 모바일프로그래밍 - 어댑터뷰 : 리사이클러뷰 📱 (0) | 2024.11.21 |
📱 모바일프로그래밍 - 프래그먼트 생성주기 메소드 📱 ( 이거 질문해야됨!!!) (0) | 2024.11.21 |
📱 모바일프로그래밍 - Navigation 📱 (0) | 2024.11.21 |