BindingExtension
BindingExtension copied to clipboard
Android ViewBinding extension to provide simpler usage in Activity, Fragment and ViewHolder.
BindingExtension
ViewBinding is an amazing tool for Android but it's not so fit in Android development as we still have to do some config. BindingExtension is built to provide a simpler usage.
Install
Add Jitpack repository to your root build.grable:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Then add dependency in your module build.gradle:
dependencies {
implementation 'com.github.jintin:BindingExtension:3.1.0'
}
Usage
First of all, BindingExtension using refelction a lot to link many things internally in order to provide simple usage.
To prevent having trouble with proguard, please remember to exclude ViewBinding related method in your proguard-rules file like this:
-keepclassmembers class * implements androidx.viewbinding.ViewBinding {
public static ** inflate(...);
}
Activity
Extend from BindingActivity with your ViewBinding type then you can use binding directly after calling super.onCreate(savedInstanceState) and you don't have to call setContentView anymore:
class MainActivity : BindingActivity<ActivityMainBinding>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding.label.setText(R.string.activity_label)
}
}
Fragment
Extend from BindingFragment with your ViewBinding type then you can use binding directly after super.onCreateView(inflater, container, savedInstanceState) is called:
class MainFragment : BindingFragment<FragmentMainBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.button.setOnClickListener {
binding.button.setText(R.string.fragment_label)
}
}
}
ViewHolder
BindingExtension provide an extension function for ViewGroup, you can call ViewGroup.toBinding() in onCreateViewHolder to get your desire type of ViewBinding.
And ViewHolder can than access ViewBinding directly without further transformation.
// inside adapter
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return MainViewHolder(parent.toBinding())
}
// ViewHolder
class MainViewHolder(private val binding: AdapterMainBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(data: String) {
binding.name.text = data
}
}
You can go to ./app module for more information.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/Jintin/BindingExtension.
