ViewBinding の使用法と Base 基本クラスの単純なカプセル化

  • 簡単な紹介:

        簡単に言うと、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 { 
    *;を実装します。
}

 もう終わりです

おすすめ

転載: blog.csdn.net/lwh1212/article/details/130017315