- 簡単な紹介:
簡単に言うと、ViewBinding は、開発者が面倒なことをせずに、ID を持つコントロールをすばやく見つけるのに役立ちます。
- 使い方は簡単:
使用する必要があるモジュールの下の .gradle ファイルで構成します。
android { buildFunction { viewBinding = true } }
設定が完了したら、使用できるようになります
例えば:
class TextActivity : AppCompatActivity() {
lateinit var binding:ActivityTextBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityTextBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btn.setOnClickListener {}
}
}
ActivityTextBinding クラスは、対応する activity_text.xml ファイルによって生成されます。
xml で対応するバインディング ファイルを生成したくない場合は、それを xml とタグに追加できます。
ツール:viewBindingIgnore="true "
- BaseActivity基本クラスをカプセル化する
abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
protected lateinit var binding: VB
override fun onCreate(savedInstanceState: Bundle?) {
initial()
super.onCreate(savedInstanceState)
binding = createBinding()
setContentView(binding.root)
initView()
initData()
}
open fun initial(){}
protected abstract fun initView()
protected abstract fun initData()
private fun createBinding(): VB {
val vbClass = getVBClass()
val inflateMethod = vbClass.getMethod("inflate", LayoutInflater::class.java)
return inflateMethod.invoke(null, layoutInflater) as VB
}
@Suppress("UNCHECKED_CAST")
private fun getVBClass(): Class<VB> {
val type = javaClass.genericSuperclass as ParameterizedType
val vbClass = type.actualTypeArguments[0] as Class<VB>
return vbClass
}
}
- BaseFragment 基本クラスをカプセル化する
abstract class BaseFragment<VB : ViewBinding> : Fragment() {
protected lateinit var binding: VB
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = createBinding(inflater, container)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
initData()
}
abstract fun initData()
protected abstract fun initView()
private fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB {
val vbClass = getVBClass()
val inflateMethod = vbClass.getMethod("inflate", LayoutInflater::class.java, ViewGroup::class.java, Boolean::class.java)
return inflateMethod.invoke(null, inflater, container, false) as VB
}
@Suppress("UNCHECKED_CAST")
private fun getVBClass(): Class<VB> {
val type = javaClass.genericSuperclass as ParameterizedType
val vbClass = type.actualTypeArguments[0] as Class<VB>
return vbClass
}
}
- 知らせ
混乱が有効になっている場合は、proguard-rules.pro ファイルを追加してください。
-keep class * androidx.viewbinding.ViewBinding { *;を実装します。 }
もう終わりです