如何在BaseActivity中访问dialog_progress布局的TextView?解决代码报错
问题解决:Dialog布局控件引用错误
你的代码存在三个关键问题,导致了unresolved reference错误:
- 类名拼写错误:
Textview应该是TextView(Android控件类名首字母大写V)。 - 控件查找上下文错误:直接调用
findViewById是从当前Activity的布局中查找控件,但tv_progress_bar属于Dialog的布局,必须通过Dialog实例来调用findViewById。 - 控件赋值方式错误:不能通过
mProgressDialog.tvProgressText设置文本,tvProgressText是你在Activity中声明的变量,需直接操作该变量的text属性。
修正后的基础版代码如下:
private var tvProgressText: TextView? = null fun showProcessDialog(text: String){ mProgressDialog = Dialog(this) mProgressDialog.setContentView(R.layout.dialog_progress) // 从Dialog的布局中查找目标控件 tvProgressText = mProgressDialog.findViewById(R.id.tv_progress_bar) // 给TextView设置显示文本 tvProgressText?.text = text mProgressDialog.show() }
推荐方案:改用ViewBinding
ViewBinding能彻底避免手动查找控件的错误,同时简化代码:
- 先在模块的
build.gradle中启用ViewBinding:
android { ... buildFeatures { viewBinding true } }
- 修改Activity中的代码:
fun showProcessDialog(text: String){ val dialogBinding = DialogProgressBinding.inflate(layoutInflater) mProgressDialog = Dialog(this) mProgressDialog.setContentView(dialogBinding.root) // 直接通过Binding对象访问布局内的控件 dialogBinding.tvProgressBar.text = text mProgressDialog.show() }
这种方式无需手动声明控件变量,还能避免空指针风险。
内容的提问来源于stack exchange,提问作者Harshvardhan Rijhwani
相关产品推荐
相关产品推荐

