【问题标题】:kotlin - resolve error in DataBindingUtil.setContentView()kotlin - 解决 DataBindingUtil.setContentView() 中的错误
【发布时间】:2019-02-06 06:20:52
【问题描述】:

我在DataBindingUtil.setContentView() 中遇到问题。它显示以下错误。

[类型推断失败:没有足够的信息来推断 fun setContentView(p0: Activity, p1: Int) 中的参数 T:T! 请明确说明。

我的代码:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    // setContentView(R.layout.activity_home) var binding = 
    DataBindingUtil.setContentView(this, R.layout.activity_home) 
} 

谁能帮我解决这个错误。我也做了干净和Rebuild(Invalidate and Restart)

请告诉我任何其他建议。

【问题讨论】:

  • 请发布您的代码。
  • override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setContentView(R.layout.activity_home) var binding = DataBindingUtil.setContentView(this, R.layout.activity_home) ...... }
  • @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置 contentView ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

标签: android kotlin android-databinding


【解决方案1】:

用途:

var binding : ActivityHomeBinding = DataBindingUtil.setContentView(this, R.layout.activity_home)

DataBindingUtil.setContentView 正在返回作为参数传入的特定布局文件的绑定。

【讨论】:

  • 这不是正确答案,请参考我的答案。
  • @Ishaan 正确与否将由出错的用户决定并解决我的或您的解决方案。
  • 一千个抱歉,那时我刚刚开始使用数据绑定。初学者要注意的一点是名称“ActivityHomeBinding”,它源自您的布局名称,在上述情况下是“activity_home”,因此是绑定类。绑定是一个自动生成的类。
【解决方案2】:

像这样创建一个绑定对象。

 val binding: ActivityMainBinding = DataBindingUtil.setContentView(
        this, R.layout.activity_main)

你不得不提到Activity Binding 类型。我有主要活动,所以绑定类型是ActivityMainBinding。这是你错过的。

应该是这样的:

override fun onCreate(savedInstanceState: Bundle?) { 
  super.onCreate(savedInstanceState) 
  setContentView(R.layout.activity_home)
  var binding : ActivityMainBinding = 
  DataBindingUtil.setContentView(this, R.layout.activity_home) 
} 

【讨论】:

    【解决方案3】:

    顺便说一句,清洁构建、无效和重启并不是 Android Studio #JustKidding 中唯一的解决方案 :)

    关于您面临的错误,您实际上需要指定视图:

    val listViewEmployees = findViewById(R.id.listViewEmployees)

    作为 ListView 到

    val listViewEmployees = findViewById<ListView>(R.id.listViewEmployees)

    【讨论】:

      【解决方案4】:

      将您的代码修改为:

          var binding : ActivityMainBinding = 
          DataBindingUtil.setContentView(this,R.layout.activity_home) 
      

      然后制作“文件->使缓存无效/重新启动”

      【讨论】:

        【解决方案5】:

        您还必须在视图的 XML 文件中启用绑定,只需将所有 ui 包装在布局标记中。

        只需转到文件:R.layout.activity_home

        它应该看起来像下面的代码-

        <?xml version="1.0" encoding="utf-8"?>
        <layout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools">
        
            <data>
        
            </data>
        
            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".activities.SurveyListActivity">
        
            </androidx.constraintlayout.widget.ConstraintLayout>
        </layout>
        

        【讨论】:

          【解决方案6】:

          在您项目的布局文件中,即ativity_home.xml,确保您已将您的布局包含在&lt;layout&gt; 标签中,它可能是一个约束、线性、相对等。 另外,将所有命名空间添加到布局标签

          例如,改变

          <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context=".ui.auth.SignUpActivity">
          

          <layout 
              xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools"
          >
          
          <data>
          .
          .
          .
          <data/>
          
          <Scroll View
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              tools:context=".ui.auth.SignUpActivity">
          

          【讨论】:

            【解决方案7】:
            private lateinit var binding: ActivityMainBinding
            override fun onCreate(savedInstanceState: Bundle?) {
               super.onCreate(savedInstanceState)
               binding = DataBindingUtil.setContentView(this@MainActivity, R.layout.activity_main)
            }
            

            在 Kotlin 中,起初一切似乎都很奇怪。参考上面的代码来解决问题,即使错误没有解决,检查下面的类型转换。

            binding = DataBindingUtil.setContentView<ActivityMainBinding>(this@MainActivity, R.layout.activity_main)
            

            仅供参考:名称 ActivityMainBinding 来自您的布局 xml 的名称。如果它被命名为“activity_main”,它将是“ActivityMainBinding”

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-01-03
              • 1970-01-01
              • 2021-11-24
              • 2021-09-27
              • 1970-01-01
              • 1970-01-01
              • 2017-08-08
              • 1970-01-01
              相关资源
              最近更新 更多