我尝试在我的项目中应用视图绑定,我喜欢适配器类,但我不明白我将如何应用。有什么想法吗?
class Center : AppCompatActivity() {
private lateinit var binding: ActivityCenterBinding
var listView: ListView? = null
private var mTitle = arrayOf("Help", "Help2", "Help3")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityCenterBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
listView = binding.help_listView
val adapter = MyAdapter(this, mTitle)
listView!!.adapter = adapter
internal inner class MyAdapter(
context: Center,
private var rTitle: Array<String>,
) : ArrayAdapter<String?>(context, R.layout.row_center, R.id.textView_center, rTitle) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val layoutInflater =
applicationContext.getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater
val binding = ActivityCenterBinding.inflate(layoutInflater, parent, false)
val myTitle = binding.textView_center
myTitle.text = rTitle[position]
return binding.root
}
}
问题是
未解析的引用:textView__center
和
预期变量
用于文本
1条答案
按热度按时间2g32fytz1#
使用View Binding时,每个布局XML类都会生成一个以其命名的“binding”类。因此,
R.layout.row_center
有一个名为RowCenterBinding
的类(下划线被删除,单词大写,并以Binding
结尾)。通过调用绑定类的静态
inflate
方法来创建绑定类的示例,如下所示:现在你有了一个
RowCenterBinding
对象。它有一个root
属性,这是你膨胀的视图层次结构(你需要在问题中的getView
方法的末尾返回)。它还有一个属性,每个在XML文件中有ID的View
都有一个属性。(这些属性的重命名方式与row_center.xml -> RowCenter
相同。)所以你最终得到了一个
binding
对象,它保存了你的View
s(binding.root
),还引用了那些ID为(binding.textView1
,binding.saveButton
等)的对象。(If你已经有了一个从XML文件膨胀的视图层次结构,比如在
Activity
中,你可以用RowCenterBinding.bind(view)
从它创建绑定对象)你一直在编辑问题,夸大不同的东西,所以只要这样做:
由于在外部Activity中也有一个名为
binding
的变量,因此您可能希望将其命名为rowBinding
或其他名称,以免混淆它们。(Also对于基本的
ArrayAdapter
,你不应该需要做任何这些,如果你删除getView
方法,它不就可以工作了吗?默认情况下,它应该创建一个视图,并使用你传递的构造函数参数在TextView上设置文本)