728x90
RecyclerView
- 스크롤이 가능한 컨테이너에 여러 개의 뷰를 담아서 보여주는 뷰 그룹
- 기존의 ListView는 100개의 item을 표시한다고 하면 100개의 view 객체를 일일이 다 생성
- RecyclerView는 화면에 보여지는 일정 갯수의 ViewHolder 객체만 생성 후 스크롤할 때마다 화면 밖으로 나간 view의 정보를 재활용한다. (화면에 나타나지 않는 뷰를 가져와서 화면에 스크롤되는 데이터와 바인딩)
- adapter를 통해 item 리스트들을 RecyclerView에 binding 시킨다.
- LayoutManager를 활용하여 각 item을 화면에 보여주는 방법 컨트롤
- LinerLayoutManger
- item들을 하나의 수직, 혹은 수평리스트로 배치
- GridLayoutManager
- item들을 그리드 형태로 배치
- 수직 배치일 땐 각 항목의 높이 동일
- 수평 방향일 땐 각 항목의 너비 동일
- StaggeredGridLayoutManager
- 그리드 레이아웃과 비슷하나 셀마다 높이, 너비가 다름
EX)
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview_group"
items="@{viewModel.item_list}"
android:layout_marginTop="10dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintTop_toBottomOf="@+id/member_add_btn_group"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent"
android:layout_height="0dp"
></androidx.recyclerview.widget.RecyclerView>
package com.jun.moiso.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ViewDataBinding;
import androidx.recyclerview.widget.RecyclerView;
import com.jun.moiso.R;
import com.jun.moiso.databinding.MemberlistItemBinding;
import com.jun.moiso.model.MemberListItem;
import com.jun.moiso.viewmodel.GroupViewModel;
public class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.MemberViewHolder<MemberlistItemBinding>> {
private GroupViewModel groupViewModel;
private ObservableArrayList<MemberListItem> memberListItems = new ObservableArrayList<>();
private Context context;
public GroupAdapter(Context context, GroupViewModel groupViewModel) {
this.groupViewModel = groupViewModel;
this.context = context;
}
@NonNull
@Override
public MemberViewHolder<MemberlistItemBinding> onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
return new MemberViewHolder<>(inflater.inflate(R.layout.memberlist_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull final MemberViewHolder<MemberlistItemBinding> holder,final int position) {
holder.binding().setItem(memberListItems.get(position));
}
@Override
public int getItemCount() {
return memberListItems.size();
}
class MemberViewHolder<T extends ViewDataBinding> extends RecyclerView.ViewHolder{
private final T binding;
public MemberViewHolder(final View v){
super(v);
this.binding = (T) DataBindingUtil.bind(v);
}
public T binding() {
return binding;
}
}
}
groupAdapter = new GroupAdapter(context, viewModel);
recyclerView.setAdapter(groupAdapter);
728x90
'Android' 카테고리의 다른 글
[안드로이드] MVVM 패턴 LiveData + ViewModel + DataBinding 예제 (3) | 2020.09.02 |
---|---|
[안드로이드] RecyclerView에 itemClickListener (0) | 2020.08.23 |
[안드로이드] ART (0) | 2020.08.23 |
[안드로이드] 안드로이드 애플리케이션 아키텍처 (0) | 2020.08.23 |
[안드로이드] 그래들 빌드 (Gradle Build) (0) | 2020.08.23 |
댓글