android 데이터바인딩 활용(1) - include, Adapter

지난 포스트에 데이터바인딩을 사용하는 방법을 알아보았습니다.

오늘은 추가적으로 활용 할수 있는 부분을 알아보도록 하겠습니다.
xml 레이아웃을 include해서 사용할 경우 참조 방법과
RecyclerView에서 사용 하는 법을  간단한 예제를 통해서 구현해 보겠습니다.

<!--item_sample.xml-->
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/text_Item"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center"
            android:text="Text Item"/>
    </RelativeLayout>
</layout>
 우선 include와 adapter에서 사용할 TextView를 가지고 있는 레이아웃 파일을 추가 하였습니다.
 
<include android:id="@+id/inc_Item" layout="@layout/item_sample"/>
 메인 레이아웃에 좀전에 만들었던 레이아웃을 include 하였습니다.
여기서 중요한 부분은 iclude한 부분에 id를 지정한 것 입니다. 기존에는 include하면
include한 레이아웃에서 findeViewById를 통해 include여부와 상관없이 사용하였습니다.
하지만 데이터바인딩에서는 해당 id값을 가지고 객체가 생성되어 사용 할수 있습니다.
위의 사진처럼 incItem이란 객체를 통해 include된 레이아웃의 뷰의 객체를 참조 할수 있습니다.
 
<!--main.xml-->
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include android:id="@+id/inc_Item" layout="@layout/item_sample"/>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/inc_Item">
        </android.support.v7.widget.RecyclerView>

    </RelativeLayout>
</layout>
Main레이아웃 xml은 다음과 같습니다.
RecyclerView를 통하여 Adapter 사용법을 알아 볼 것이기 때문에 RecyclerView도 추가하였습니다.
 
메인소스부분은 별다른 것이 없기 때문에 바로 RecyclerView의 Adapter의 소스로 넘어 가도록 하겠습니다.
 
static class BindingHolder extends RecyclerView.ViewHolder {

        public ItemSampleBinding binding;

        public BindingHolder(View itemView) {
            super(itemView);
            binding = DataBindingUtil.bind(itemView);
        }
    }
Holder 부분에서 DataBindingUtil의 bind함수를 통해  바인딩 객체의 값을 받아 옵니다.
 
@Override
    public void onBindViewHolder(BindingHolder holder, int position) {

        holder.binding.textItem.setText("Binding Item "+ position);
    } 
Holder로 넘어온 바인딩 객채를 사용 하면 됩니다.


//SampleRecyclerAdapter.java
public class SampleRecyclerAdapter extends RecyclerView.Adapter<SampleRecyclerAdapter.BindingHolder> {

    @Override
    public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_sample, parent, false);
        return new BindingHolder(v);
    }

    @Override
    public void onBindViewHolder(BindingHolder holder, int position) {

        holder.binding.textItem.setText("Binding Item "+ position);
    }

    @Override
    public int getItemCount() {
        return 30;
    }

    static class BindingHolder extends RecyclerView.ViewHolder {

        public ItemSampleBinding binding;

        public BindingHolder(View itemView) {
            super(itemView);
            binding = DataBindingUtil.bind(itemView);
        }
    }
}
Adapter의 전체소스입니다.
 
 include, Adapter에서 사용을 해보면 데이터바인딩의 편리함을
더크게 느낄수 있는 것 같습니다. 


댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

카드뉴스 마케팅 팁

[iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 1부(cocospods)

[정보] Git을 이용한 형상관리 #1 - Git의 세가지 상태, Git 설치

[AWS] Amazon Polly 한국어 서비스 지원