【问题标题】:How to access content_main.xml elements in MainActivity.kt by using ViewBinding in Android Studio 4.1?如何在 Android Studio 4.1 中使用 ViewBinding 访问 MainActivity.kt 中的 content_main.xml 元素?
【发布时间】:2020-11-21 17:54:54
【问题描述】:

例如,我想通过 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)
....

    }
}

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

【问题讨论】:

    标签: android android-viewbinding


    【解决方案1】:

    替换:

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

    与:

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

    您需要使用root 的膨胀bindingsetContentView() 才能进行绑定。

    【讨论】:

    • 非常感谢!我认为 root 意味着 content_main.xml
    【解决方案2】:

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

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

    然后在PhotoDetailsActivity中访问RecyclerView时,

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

    【讨论】:

      【解决方案3】:

      试试这个。这个对我有用。当您处于主要活动中并创建如下绑定引用时,您可以通过此引用访问主要活动中的所有视图(文本视图、编辑文本、按钮等)。

      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
              }
      

      它有效!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-16
        • 2013-08-16
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 2015-12-29
        • 1970-01-01
        相关资源
        最近更新 更多