티스토리 뷰
Recycler View 리사이클러뷰
: 리스트 모양으로 보여줄 수 있는 선택위젯 중 가장 권장하는 위젯
Recycler View의 구성요소
1) 리사이클러뷰(RecyclerView)
:사용자 데이터를 리스트 형태로 화면에 표시하는 컨테이너 역할을 한다.
2) 레이아웃 매니저(Layout Manager)
: Item View들이 리사이클러뷰 내부에 배치되는 형태 결정
ex 리니어 레이아웃 매니저, 그리드 레이아웃 매니저, 스태거드 그리드 레이아웃 매니저
// 리사이클러뷰 레이아웃 매니저 생성 및 지정
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
3 ) 어댑터(Adapter)
: 사용자 데이터 리스트(Data List)로부터 아이템 뷰를 만든다
// 어댑터 생성
mAdapter = new RecyclerImageTextAdapter(mList);
mRecyclerView.setAdapter(mAdapter);
Adapter 초기화와 필요한 값 생성
//@param context : RecyclerView와 Adapter가 Activity, 혹은 fragment의 기본적인 컨텐츠에 접근하기 위해 필요하다.
//@param userArrayList: 서버로부터 받아온 User의 리스트를 전달받는다.
Public UserInfoAdapter(Context context, ArrayList<User> userArrayList){
this.context =context;
this.userArrayList = userArrayList;
}
// Adapter생성자를 통해서 필요한 값을 생성하고
// 동시에 초기화를 해준다.
Adapter 메소드
어댑터를 만들 때 반드시 RecyclerView.Adapter를 상속하여 구현해야 한다. RecyclerView.Adapter를 상속받아 새로운 어댑터를 만들 때, 오버라이드(재정의)가 필요한 메서드는 아래와 같다.
1) onCreateViewHolder(ViewGroup parent, int viewType)
: 새로운 View를 생성할 때 실행되어 ViewHolder를 리턴합니다.
- ViewHolder 생성 ( viewType형태의 아이템 뷰를 위한 뷰홀더 객체 생성 )
- 아이템 뷰가 담겨있는 xml리소스 파일과 ViewHolder를 연결시킨다. ( ViewHolder에는 recycler_item.xml리소스 파일이 담겨있다)
@NonNull
@Override
public RecyclerImageTextAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.recycler_item,parent,false);
RecyclerImageTextAdapter.ViewHolder vh = new RecyclerImageTextAdapter.ViewHolder(view);
return vh;
}
2) onBindViewHolder(ViewHolder holder, int position)
: ViewHolder에 데이터를 넣는다 (position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시)
- 각 아이템(항목)별 ViewHolder데이터 처리
// onBindViewHolder() - position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표
@Override
public void onBindViewHolder(@NonNull RecyclerImageTextAdapter.ViewHolder holder, int position) {
RecyclerItem item = mData.get(position);
holder.icon.setImageDrawable(item.getIcon());
holder.title.setText(item.getTitle());
holder.desc.setText(item.getDesc());
}
3) getItemCount()
: 전체 아이템 갯수 리턴
- 화면에 포여줄 Item 갯수 처리
@Override
public int getItemCount() {
return mData.size();
}
4 ) ViewHolder
:화면에 표시될 각 아이템뷰(Item View)를 보관하는 객체
Recycler view는 inflate를 최소화 하기 위해서 뷰를 재활용하는데 , 이 때 각각의 요소 뷰(아이템뷰)에 바로 액세스 할 수 있도록 저장해두고 사용하는 객체이다.
- RecyclerView.ViewHolder을 상속하여 ViewHolder객체를 만든다 .
- Adapter의 OnCreateViewHolder에서 생성되어 RecyclerView에 전달된다.
- ViewHolder에서 관리할 View(item View)는 생성자를 통해서 전달해줘야 한다.
// 아이템 뷰를 저장하는 뷰홀더 클래스
public class ViewHolder extends RecyclerView.ViewHolder{
ImageView icon;
TextView title;
TextView desc;
public ViewHolder(@NonNull View itemView) {
super(itemView);
// 뷰 객체에 대한 참조 .
icon = itemView.findViewById(R.id.icon);
title = itemView.findViewById(R.id.title);
desc = itemView.findViewById(R.id.desc);
}
}
* ViewHolder 메소드
getAdapterPosition() : 현재 ViewHoler가 보여준는 View가 나타내는 Adapter상에서의 위치
getLayoutPosition(): RecyclerView의 몇 번째 ChildView인지를 나타내는 값
getItemViewType(): RecyclerView가 여러 모양의 Item View를 가질 때 현재 ViewHolder가 나타내는 ViewType의 id
setIsRecyclable: 이 ViewHolder를 재활용 가능하게 할지 여부를 결정
5 ) 데이터셋(DataSet)
:데이터셋은 레이아웃에 보여줄 데이터를 의미한다.
데이터는 인터넷에 접속해서 가지고 온 데이터일 수도 있고, 안드로이드 기기에 저장되어 있는 이미지가 될 수도 있다.
결과적으로 어떤 데이터이든 집합 형태로 저장되어 있어야 한다. ( 집합형태는 ArrayList 나 Vector 또는 배열 등을 의미한다. )
//아이템 추가
// .. 중략
addItem(getDrawable(R.drawable.download1),"Lion","Lion is strong animal");
addItem(getDrawable(R.drawable.download2),"TIger","Tiger is strong animal");
addItem(getDrawable(R.drawable.download3),"거북이","거북이는 착하다");
mAdapter.notifyDataSetChanged();
}
public void addItem(Drawable icon,String title, String desc){
RecyclerItem item = new RecyclerItem();
item.setIcon(icon);
item.setTitle(title);
item.setDesc(desc);
mList.add(item);
}
'Android' 카테고리의 다른 글
Fragment 사용방법 (0) | 2021.09.03 |
---|---|
Fragment (0) | 2021.09.03 |
inflation (0) | 2021.09.03 |
View 클래스 계층 (0) | 2021.09.03 |
Intent (0) | 2021.09.02 |