如何在自定义对话框布局中使用View Binding?

21

我在自定义对话框布局中实现视图绑定方面遇到了困难。这可行吗?

 private fun showCustomDialog(title: String) {
    val dialog = Dialog(activity)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setCancelable(false)

    dialog.setContentView(R.layout.custom_layout)

    val body = dialog.findViewById(R.id.body) as TextView
    body.text = title

    val noBtn = dialog.findViewById(R.id.noBtn) as TextView
    yesBtn.setOnClickListener {
        dialog.dismiss()
    }

    val yesBtn = dialog.findViewById(R.id.yesBtn) as Button
    noBtn.setOnClickListener { dialog.dismiss() }
    dialog.show()

}
6个回答

43

可以实现。

CustomDialogBinding binding = CustomDialogBinding 
          .inflate(LayoutInflater.from(getContext()));
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
    builder.setView(binding.getRoot());

CustomDialogBinding是您自定义布局的视图绑定文件的名称

kotlin

val bind :CustomDialogBinding = CustomDialogBinding .inflate(inflater)
dialog.setContentView(bind.root)

太棒了!像魔法一样运行良好。 - Vanchinathan Chandrasekaran

14

代码:

val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val binding = CustomDialogLayoutBinding.inflate(inflater)
dialog.setContentView(binding.root)

4

例子:

val dialogBinding = DialogCustomBinding.inflate(layoutInflater)
dialog.setView(dialogBinding.root)

1

代码:

 val winnerDBinding =WinnerDialougeBinding.inflate(layoutInflater)
 val dialog = Dialog(this);
 dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
 dialog.setCancelable(false)
 dialog.setContentView(winnerDBinding.root)

 winnerDBinding.btnPlayAgain.setOnClickListener {
    val intent = Intent(this,MainActivity::class.java)
    finish()
    startActivity(intent)
 }
 dialog.show()

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,以帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

0
类似于第一个答案的方式,包括一些额外的行。假设你的绑定是DialogReviewBinding
val inflater = activity.layoutInflater
val dialogBinding = DialogReviewBinding.inflate(inflater)
val dialog = AlertDialog.Builder(activity).create()
dialog.setView(dialogBinding.root)
dialog.show()

这被一个activity?.let { activity -> }块所包围。

0
我在Android上的工作经验不多,但是我遇到了这个错误,最终我成功解决了它。 关于你的代码,我认为应该是这样的:
private fun showCustomDialog(title: String) {
    val dialog = Dialog(activity)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setCancelable(false)

    val dialogBinding = customLayoutBinding.inflate(layoutInflater)
    dialog.setContentView(this.dialogBinding.root)

    val body = dialogBinding.body
    val noBtn = dialogBinding.noBtn
    val yesBtn = dialogBinding.yesBtn

    body.text = title

    noBtn.setOnClickListener {
        dialog.dismiss()
    }

    yesBtn.setOnClickListener {
        dialog.dismiss()
    }

    dialog.show()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接