Skip to content

DataBinding与RecyclerView ListView结合的万能适配器

Notifications You must be signed in to change notification settings

MrsLi/UniversalDatabindingAdapter

Repository files navigation

UniversalDatabindingAdapter

DataBinding与RecyclerView ListView结合的万能适配器

使用说明: 1.单布局的使用: 话不多说,反手就是代码,下面举一个栗子:

XML文件:item.xml

<data>
    <import type="android.view.View"/>
    <variable
        name="findGoodsModelTest"
        type="com.jmhshop.logisticsCar.model.FindGoodsModelTest"/>
</data>
<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView

        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="出发地"
        android:text="@{findGoodsModelTest.placeFirst}"
        android:textSize="@dimen/sp_15"
        android:textColor="@color/color_FF051832"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="10dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginStart="10dp" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/icon_point_big"
        app:layout_constraintLeft_toRightOf="@+id/textView"
        android:layout_marginLeft="3dp"
        app:layout_constraintTop_toTopOf="@+id/textView"
        app:layout_constraintBottom_toBottomOf="@+id/textView"
        android:layout_marginStart="3dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="目的地"
        android:text="@{findGoodsModelTest.placeEnd}"
        android:textSize="@dimen/sp_15"
        android:textColor="@color/color_FF051832"
        app:layout_constraintTop_toTopOf="@+id/textView"
        app:layout_constraintBottom_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="0.0"
        app:layout_constraintLeft_toRightOf="@+id/imageView2"
        android:layout_marginLeft="3dp"
        android:layout_marginStart="3dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="时间"
        android:text="@{findGoodsModelTest.time}"
        android:textColor="@color/color_FF999999"
        android:textSize="@dimen/sp_13"
        android:layout_marginRight="25dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="6dp"
        android:layout_marginEnd="25dp" />

    <TextView
        android:text="@{findGoodsModelTest.type}"
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="13米 高低板/34吨 重货"
        android:textColor="@color/color_FF051832"
        android:textSize="@dimen/sp_14"
        app:layout_constraintLeft_toLeftOf="@+id/textView"
        android:layout_marginTop="5dp"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:scaleType="fitXY"
        android:src="@drawable/ic_launcher"
        app:layout_constraintLeft_toLeftOf="@+id/textView"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/textView4" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        tools:text="河北聚民惠有限责任公司"
        android:text="@{findGoodsModelTest.name}"
        android:singleLine="true"
        android:ellipsize="end"
        android:textColor="@color/color_FF606060"
        android:textSize="14sp"
        app:layout_constraintLeft_toRightOf="@+id/imageView3"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="12dp"
        app:layout_constraintTop_toBottomOf="@+id/textView4"
        android:layout_marginStart="8dp" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/icon_renzheng"
        app:layout_constraintLeft_toRightOf="@+id/textView5"
        android:layout_marginLeft="4dp"
        android:visibility="@{findGoodsModelTest.IDAuth==true?View.VISIBLE:View.GONE}"
        app:layout_constraintTop_toTopOf="@+id/textView5"
        app:layout_constraintBottom_toBottomOf="@+id/textView5"
        android:layout_marginStart="4dp" />

    <ImageView
        android:visibility="@{findGoodsModelTest.IDAuth==true?View.VISIBLE:View.GONE}"
        android:id="@+id/imageView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/icon_companyrz"
        app:layout_constraintTop_toTopOf="@+id/imageView4"
        app:layout_constraintBottom_toBottomOf="@+id/imageView4"
        app:layout_constraintLeft_toRightOf="@+id/imageView4"
        android:layout_marginLeft="5dp"
        android:layout_marginStart="5dp" />

    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="交易:"
        android:text="@{`交易:`+findGoodsModelTest.jiaoyiNum}"
        android:textColor="@color/color_FF606060"
        android:textSize="@dimen/sp_13"
        app:layout_constraintLeft_toLeftOf="@+id/textView5"
        android:layout_marginTop="5dp"
        app:layout_constraintTop_toBottomOf="@+id/textView5" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="发货:"
        android:text="@{`发货:`+findGoodsModelTest.sendGoodsNum}"
        android:textColor="@color/color_FF606060"
        android:textSize="@dimen/sp_13"
        app:layout_constraintBottom_toBottomOf="@+id/textView6"
        app:layout_constraintLeft_toRightOf="@+id/textView6"
        android:layout_marginLeft="20dp"
        app:layout_constraintTop_toTopOf="@+id/textView6"
        android:layout_marginStart="20dp" />

    <ImageView
        android:id="@+id/call_phone"
        android:layout_width="24dp"
        android:layout_height="23dp"
        android:src="@mipmap/icon_tel"
        android:layout_marginRight="20dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="18dp"
        app:layout_constraintTop_toBottomOf="@+id/textView3"
        android:layout_marginEnd="20dp" />
    <View
        android:layout_width="wrap_content"
        android:layout_height="1dp"
        android:background="@color/color_cccccccc"
        android:layout_marginRight="0dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="0dp"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/imageView3" />
</android.support.constraint.ConstraintLayout>

代码中使用:Fragment or Activity

    findGoodsModelTestListData = new ArrayList<>();
    findGoodsModelTestMyDataBindingAdapter = new MyDataBindingAdapter<>(findGoodsModelTestListData, R.layout.item_find_goods, BR.findGoodsModelTest, getActivity());
    findGoodsModelTestMyDataBindingAdapter.setDecorator(new FindGoodsDecorator());
    recyclerview.setAdapter(findGoodsModelTestMyDataBindingAdapter);

FindGoodsDecorator.class(为了使用数据方面,可以直接写在Acitivity或Fragment中)的作用是:回调,以便处理item的点击事件等,下面请看栗子

private class FindGoodsDecorator implements MyDataBindingAdapter.Decorator{

    @Override
    public void decorator(MyDataBindingAdapter.ViewHolder holder, int position, int viewType) {
        ViewDataBinding binding = holder.getBinding();
        View view = binding.getRoot();
        //在这里处理自己的item事件
       view.setOnClickListener(v->{
           startActivity(new Intent(getActivity(), NewOrderDetailActivity.class));
       });
    }
}

2.多布局的使用: 多布局的使用demo app中有栗子,可以直接参考(栗子写的有点粗糙,但是它的使用方法表达的还算清晰) 喜欢的猿们,star一下吧!

二 使用方式: Step 1. 添加JitPack代码库地址

allprojects { repositories {

        maven { url 'https://jitpack.io' }
    }
}

Step 2.添加依赖

dependencies {
        compile 'com.github.MrsLi:UniversalDatabindingAdapter:v1.0'
}

About

DataBinding与RecyclerView ListView结合的万能适配器

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages