[Android/Layout]RecyclerView 내에서 View Binding 사용하기

2021. 9. 26. 12:38Android/UI-UX 디자인

728x90
반응형

01. view binding을 사용할 수 있도록 환경 설정

<build.gradle(Module:프로젝트파일명)>

android {
    // 기존 내용들 생략..
    buildFeatures {
        // 뷰 바인딩 활성화
        viewBinding true 
    }
}

 

02. Activity / Fragment에서 RecyclerView 설정

<JAVA>

binding.recyclerView.setLayoutManager(
	new LinearLayoutManager({this 혹은 context}, LinearLayoutManager.VERTICAL, false));
binding.recyclerView.setAdapter(new {Adapter명: MyAdapter}({리사이클러뷰에 넣을 리스트}));
binding.recyclerView.setHasFixedSize(true);

<Kotlin>

binding.recyclerView.layoutManager 
	= LinearLayoutManager({this 혹은 context}, LinearLayoutManager.VERTICAL, false)
binding.recyclerView.adapter = {Adapter명: MyAdapter}({리사이클러뷰에 넣을 리스트})
binding.recyclerView.setHasFixedSize(true)

 

03. Adapter  설정

<JAVA>

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.HomeHolder> {
    ArrayList<String> itemList;
    public MyAdapter(ArrayList<String> itemList) {
        this.itemList = itemList;
    }

    @NonNull
    @Override
    public HomeHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        {리사이클러뷰 아이템 레이아웃명 + Binding} binding 
        	= {리사이클러뷰 아이템 레이아웃명 + Binding}
			.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false);
        return new HomeHolder(binding);
    }

    @Override
    public void onBindViewHolder(@NonNull HomeHolder holder, int position) {
        // holder.binding.{아이템} 세팅
    }

    @Override
    public int getItemCount() {
        return itemList.size();
    }

    static class HomeHolder extends RecyclerView.ViewHolder{
        {리사이클러뷰 아이템 레이아웃명 + Binding} binding;
        public HomeHolder({리사이클러뷰 아이템 레이아웃명 + Binding} b){
            super(b.getRoot());
            binding = b;
        }
    }
}

<Kotlin>

class MyAdapter(private val itemList: ArrayList<String>) : RecyclerView.Adapter<MyHolder>(){
	override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyHolder {
		val binding = {리사이클러뷰 아이템 레이아웃명 + Binding}
			.inflate(LayoutInflater.from(viewGroup.context), viewGroup, false)
		return MyHolder(binding)
	}

	override fun getItemCount(): Int {
		return itemList.size
	}

	override fun onBindViewHolder(holder: MyHolder, position: Int) {
		holder.binding.{아이템명} 세팅
	}

	class MyHolder(val binding: {리사이클러뷰 아이템 레이아웃명 + Binding}) : RecyclerView.ViewHolder(binding.root)
}

* 리사이클러뷰 아이템 레이아웃명 + Binding : 레이아웃이 layout_list 이면 ListLayoutBinding으로 사용

 

 

728x90
반응형