Using android dataBinding step by step
Handle TabLayout with dataBinding and also recyclerView with different type show
for the first step you need add this code into your module gradle
dataBinding {
enabled = true
}
-
Binding activity
-
change activity_main.xml
<layout xmlns:android="http:https://schemas.android.com/apk/res/android"> <data> <!--UserInfo is BaseObservable Object--> <variable name="temp" type="com.prime.model.UserInfo"/> <!--MyHandler is method in MainActivity --> <variable name="handler" type="com.prime.android.MainActivity.MyHandler"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!--you can bind variable like this @={temp.nicename}--> <TextView android:layout_width="match_parent" android:layout_height="42dp" android:text="@={temp.nicename}" /> <!--you can add method as action in this way @{() -> handler.callService()}--> <Button android:layout_width="match_parent" android:layout_height="42dp" android:text="@={temp.nicename}" android:onClick="@{() -> handler.callService()}"/> </LinearLayout> </layout>
-
change MainActivity
change
setContentView(R.layout.activity_main);
to
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
and after that you can bind your parameters
binding.setTemp(user); binding.setHandler(new MyHandler());
-
-
Binding Adapter to TabLayout and ViewPager
- you can check this layout for that activity_page_list.xml
<layout xmlns:android="http:https://schemas.android.com/apk/res/android" xmlns:app="http:https://schemas.android.com/apk/res-auto"> <data> <!-- variable of ViewPager for tabLayout--> <variable name="tabHandler" type="com.prime.custom_view.CustomViewPager" /> <!-- adapter for ViewPager --> <variable name="adapterHandler" type="com.prime.android.PageListActivity.pagerAdapter" /> </data> <androidx.coordinatorlayout.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/layout_toolbar"/> <LinearLayout android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_width="match_parent" android:layout_height="match_parent"> <!--assign viewPager to Tablayout app:pager="@{tabHandler}"--> <!--app:pager isn't available for assign ViewPager view, so I added that into java code with @BindingAdapter({"pager"})--> <com.prime.custom_view.TabLayoutCustom android:id="@+id/tab_layout" style="@style/CustomTabLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary" app:pager="@{tabHandler}" /> <!--assign adapter to viewPager android:pagerAdapter="@{adapterHandler}"--> <!--android:pagerAdapter isn't available too and I added that into java code with @BindingAdapter({"android:pagerAdapter"})--> <com.prime.custom_view.CustomViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" android:pagerAdapter="@{adapterHandler}" /> </LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout> </layout>
- for Binding java part you can check PageListActivity.java to realise that better.
-
Binding ImageView source
for binding image src we need to use @BindingAdapter("android:src") and you can check it into BaseActivity
@BindingAdapter("android:src") public static void BindingImageDetails(ImageViewCustom imageView, String url) { if (!PublicFunction.StringIsEmptyOrNull(url)) { imageView.loadImage(url); } }