티스토리 뷰

Android

Recycler View

세이브 2021. 9. 3. 12:53

 

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);

}



참고 : 네이버 부스트코스 안드로이드 https://www.boostcourse.org/mo316

'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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함