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.