Android Kotlin Viewbinding封装

目录

Viewbinding配置

Activity封装

Activity使用

Fragment封装

Fragment使用

Dialog封装

Dialog使用


Viewbinding配置

Kotlin 复制代码
android { 
   viewBinding { enabled = true } 
} 

Activity封装

Kotlin 复制代码
import android.os.Bundle
import android.view.LayoutInflater
import androidx.appcompat.app.AppCompatActivity
import androidx.viewbinding.ViewBinding

/**
 * @explain
 * @author Created by PGC on 2023/12/11 9:56.
 */
abstract class BaseBindingActivity<VB : ViewBinding>(private val inflate: (LayoutInflater) -> VB) : AppCompatActivity() {

    lateinit var binding: VB

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = inflate(layoutInflater)
        setContentView(binding.root)
    }

}

Activity使用

Kotlin 复制代码
class ExampleActivity : BaseBindingActivity<ActivityExampleBinding>(ActivityExampleBinding::inflate) {
    @SuppressLint("SetTextI18n")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding.exampleBindingBt.text = "binding"
    }
}

Fragment封装

Kotlin 复制代码
abstract class BaseBindingFragment<VB : ViewBinding>(private val inflater: (LayoutInflater, ViewGroup?, Boolean) -> VB) :
    Fragment() {

    private var _binding: VB? = null
    val binding: VB get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = inflater(inflater, container, false)
        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

}

Fragment使用

Kotlin 复制代码
class ExampleFragment : BaseBindingFragment<FragmentExampleBinding>(FragmentExampleBinding::inflate) {

    @SuppressLint("SetTextI18n")
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.exampleBindingTv.text="binding"
    }
}

Dialog封装

Kotlin 复制代码
abstract class BaseBindingDialog<VB : ViewBinding>(context: Context,themeResId: Int,private val inflate: (LayoutInflater) -> VB) : Dialog(context, themeResId) {

  lateinit var binding: VB

  constructor(context: Context, inflate: (LayoutInflater) -> VB) : this(context, 0, inflate)

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = inflate(layoutInflater)
    setContentView(binding.root)
  }
}

Dialog使用

Kotlin 复制代码
class ExampleDialog(context: Context): BaseBindingDialog<DialogExampleBinding>(context,0,DialogExampleBinding::inflate) {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding.tv.text = "binding"
    }
}
相关推荐
工程师老罗4 小时前
如何在Android工程中配置NDK版本
android
Libraeking7 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位7 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1239 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs10 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob10 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔10 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei99610 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly12 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首12 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节