【问题标题】:viewBinding not work in android studio.what is problem?viewBinding 在 android studio 中不起作用。有什么问题?
【发布时间】:2021-06-25 12:26:42
【问题描述】:

当我使用视图绑定并用它调用视图时 当我单击视图进行测试时,我处理一个事件并运行程序,没有任何反应

没有错误

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding = ActivityMainBinding.inflate(LayoutInflater.from(this))

        setContentView(R.layout.activity_main)

        //Test view binding
        binding.btnOneNumber.setOnClickListener { 
            binding.txtView.text = "1"
        }

    }
}

这是我的 build.gradle

android{
  buildFeatures {
        viewBinding = true
    }
}

【问题讨论】:

    标签: java android android-studio kotlin


    【解决方案1】:

    您在 onCreate 方法中设置的视图绑定是导致问题的原因,请参阅 - https://developer.android.com/topic/libraries/view-binding#activities 以供参考。 最佳实践是在 onCreate 上方将绑定变量声明为像这样的 latinit - private lateinit var binding: ActivityMainBinding 然后您应该将 onCreate 中的绑定变量设置为正在膨胀的绑定类 - binding = ActivityMainBinding.inflate(layoutInflater) 然后获取根视图 - val view = binding.root - 和使用它来设置内容视图 setContentView(view) 总的来说,你的代码应该是这样的

    类 MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
    
        //Test view binding
        binding.btnOneNumber.setOnClickListener { 
            binding.txtView.text = "1"
        }
    
    }
    

    }

    您的应用之前没有响应,因为您将错误的视图设置为您的布局,使用我展示的代码,您将与绑定关联的视图设置为您的布局,这就是绑定变为响应式的原因.

    【讨论】:

      【解决方案2】:

      当你使用绑定时

          val binding = ActivityMainBinding.inflate(LayoutInflater.from(this))
      

      那么你必须使用它的根作为内容视图,所以

      setContentView(binding.root)
      

      【讨论】:

        【解决方案3】:

        如下启用数据绑定功能

        buildFeatures {
            viewBinding true
        }
        

        不要在你的 xml 中包含 <layout> </layout>

        访问如下

         val binding = ActivityMainBinding.inflate(LayoutInflater.from(this))
         setContentView(binding.root)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-10
          • 2020-01-16
          • 1970-01-01
          • 2020-01-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多