如何使用 Android Studio 4.1 中的 ViewBinding 访问 MainActivity.kt 中的 content_main.xml 元素?

How to access content_main.xml elements in MainActivity.kt by using ViewBinding in Android Studio 4.1?

例如,我想通过Mainactivity.kt访问content_main.xml中的RecyclerView(Id recycler_view)元素。 content_main.xml 在 activity_main.xml.



class PhotoDetailsActivity : AppCompatActivity() {
private lateinit var binding: ContentMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(findViewById(R.id.toolbar))
        binding = ContentMain.inflate(layoutInflater)
        binding.recycler_view.layoutManager = LinearLayoutManager(this)
....

    }
}

但是这种方式不行。我该怎么做?

替换:

        setContentView(R.layout.activity_main)
        setSupportActionBar(findViewById(R.id.toolbar))
        binding = ContentMain.inflate(layoutInflater)

与:

        binding = ContentMain.inflate(layoutInflater)
        setContentView(binding.root)
        setSupportActionBar(binding.toolbar)

您需要将膨胀的 bindingrootsetContentView() 结合使用才能使绑定生效。

在这种情况下,视图绑定将创建对包含的布局绑定对象的引用。您需要为 <include> 标签设置 id 以便视图绑定生成 属性。在这种情况下

 <include layout="@layout/content_main"
            android:id="@+id/main_container"/>

然后在 PhotoDetailsActivity 中访问 RecyclerView 时,

 binding.main_container.recycler_view.layoutManager = LinearLayoutManager(this)

试试这个。这个对我有用。当您在 main activity 中并创建如下绑定引用时,您可以通过此引用访问 Main Activity 中的所有视图(textview、edittext、button 等)。

private  lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
        binding = ActivityMainBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

binding.textView  // for example

如果您想从 content_main 布局访问视图元素,请使用此代码:

binding.root.findViewById<Button>(R.id.myButton).setOnClickListener { view ->

           //some action code
        }

而且有效!