Skip to content

Repository files navigation

DataBindingExamplekt

Important enable DataBinding on your project, setup in gradle.

android {
...
//Android Studio Version Until 4
dataBinding {
enabled =true
}
//Android Studio Version 4 -> gradle version 6.1.1 -> android gradle plugin version 4.0.0
buildFeatures{
dataBinding =true
}
}

Add Dependencies to enable ViewModel.

dependencies {
...
//mvvm
implementation 'android.arch.lifecycle:viewmodel:1.1.1'
implementation 'android.arch.lifecycle:livedata:1.1.1'
implementation 'android.arch.lifecycle:extensions:1.1.1'
}

ViewModel Example.

importandroidx.lifecycle.ViewModel;classMyViewModel : ViewModel() {
var str =MutableLiveData<String>()
}

DataBinding On Activity

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variablename="viewModel"type="com.gzeinnumer.databindingexamplekt.MyViewModel" />
</data>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<TextViewandroid:text="@{viewModel.str}"android:id="@+id/my_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>
</layout>

MainActivity.kt

classMainActivity : AppCompatActivity() {
var binding:ActivityMainBinding?=nulloverridefunonCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
binding =DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.viewModel =MyViewModel()
binding.btn.text ="Hallo Zein"
}
overridefunonDestroy() {
super.onDestroy()
binding =null
}
}

FullCode

DataBinding On Fragment

fragment_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variablename="viewModel"type="com.gzeinnumer.databindingexamplekt.MyViewModel" />
</data>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<TextViewandroid:text="@{viewModel.str}"android:id="@+id/my_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>
</layout>

MainFragment.kt

classMainFragment : Fragment() {
privatevar binding:FragmentMainBinding?=nulloverridefunonCreateView(inflater:LayoutInflater, container:ViewGroup?,
savedInstanceState:Bundle?): View? {
binding =DataBindingUtil.setContentView(requireActivity(), R.layout.fragment_main)
binding!!.viewModel =MyViewModel()
return binding!!.root
}
overridefunonDestroyView() {
super.onDestroyView()
binding =null
}
}

FullCode

DataBinding On AdapterRecyclerView (Single Type)

item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variablename="viewModel"type="com.gzeinnumer.databindingexamplekt.MyViewModel" />
</data>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<TextViewandroid:text="@{viewModel.str}"android:id="@+id/my_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>
</layout>

AdapterRV.kt

classAdapterRV : RecyclerView.Adapter<AdapterRV.MyHolder>() {
...
overridefunonCreateViewHolder(parent:ViewGroup, viewType:Int): MyHolder {
val binding:ItemAdapterRvBinding=ItemAdapterRvBinding.inflate(LayoutInflater.from(parent.context), parent, false)
binding.viewModel =MyViewModel()
returnMyHolder(binding)
}
classMyHolder(itemView:ItemAdapterRvBinding) : RecyclerView.ViewHolder(itemView.root) {
var binding:ItemAdapterRvBinding= itemView
funbindData(data:String?, onClick:MyOnClick?) {
binding.text.text = data
if (onClick !=null) {
binding.text.setOnClickListener { onClick.myOnClick(adapterPosition) }
}
}
}
}

FullCode

DataBinding On AdapterRecyclerView (Multi Type)

item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variablename="viewModel"type="com.gzeinnumer.databindingexamplekt.MyViewModel" />
</data>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<TextViewandroid:text="@{viewModel.str}"android:id="@+id/my_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>
</layout>

AdapterRV.kt

classAdapterRVMultiType : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
...
overridefunonCreateViewHolder(parent:ViewGroup, viewType:Int): RecyclerView.ViewHolder {
returnif (viewType ==TYPE_NORMAL) {
val binding:ItemAdapterRvBinding=ItemAdapterRvBinding.inflate(LayoutInflater.from(parent.context), parent, false)
binding.viewModel =MyViewModel4()
MyHolder(binding)
} else {
val binding:ItemAdapterRvBinding=ItemAdapterRvBinding.inflate(LayoutInflater.from(parent.context), parent, false)
binding.viewModel =MyViewModel4()
MyHolder(binding)
}
}
classMyHolder(itemView:ItemAdapterRvBinding) : RecyclerView.ViewHolder(itemView.root) {
var binding:ItemAdapterRvBinding= itemView
funbindData(data:String, onClick:MyOnClick) {
binding.text.text = data
binding.text.setOnClickListener { onClick.myOnClick(adapterPosition) }
}
}
companionobject {
privateconstvalTYPE_NORMAL=1
}
overridefungetItemViewType(position:Int): Int {
returnif (position !=-1) {
TYPE_NORMAL
} else {
0
}
}
}

FullCode

DataBinding On DialogFragment

fragment_main_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variablename="viewModel"type="com.gzeinnumer.databindingexamplekt.MyViewModel" />
</data>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<TextViewandroid:text="@{viewModel.str}"android:id="@+id/my_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>
</layout>

MainDialog.kt

classMainDialog : DialogFragment() {
overridefunonCreateView(inflater:LayoutInflater, container:ViewGroup?,
savedInstanceState:Bundle?): View? {
binding =DataBindingUtil.setContentView(requireActivity(), R.layout.fragment_main_dialog)
binding!!.viewModel =MyViewModel3()
return binding!!.root
}
overridefunonViewCreated(view:View, savedInstanceState:Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
initOnClick()
}
overridefunonDestroyView() {
super.onDestroyView()
binding =null
}
}

FullCode


Copyright 2020 M. Fadli Zein

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages