【问题标题】:DataBindingUtil.setContentView - Type parameter T has incompatible upper boundsDataBindingUtil.setContentView - 类型参数 T 具有不兼容的上限
【发布时间】:2015-11-17 04:27:33
【问题描述】:

“Android Studio”显示错误消息“类型参数 T 具有不兼容的上限:ViewDataBinding 和 ActivityChecklistsBinding。

ActivityChecklistsBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_checklists);

在更新 ADK 之前它工作正常。有什么想法有什么问题吗?

【问题讨论】:

标签: android


【解决方案1】:

我遇到了同样的问题。我尝试了几件事,清理和重建项目。

但是,在我选择File -> Invalidate Caches / Restart后它起作用了

【讨论】:

  • 你能把这个答案简化为有帮助的事情吗?
  • 当您对绑定更新是否已正确重新编译有任何疑问时,我认为这是一个很好的解决方案。谢谢!
  • 这不是正确答案
【解决方案2】:

绑定活动是自动生成的,名称来自布局文件,而不是活动类。

因此,如果您有一个名为BeautifulActivity 的活动和名为sweet_layout.xml 的相应布局,那么生成的名称将是SweetLayoutBinding 而不是BeautifulActivityBinding

不要在 MainActivityactivity_main.xml 之间混淆而犯同样的错误?

来源Android Developers

【讨论】:

    【解决方案3】:
    Try This Work for sure...
    
      Step 1: Add this code in the build.gradle(Mobile:app)
               dataBinding {
                    enabled = true
                }
    
            Example:
             buildTypes {
                    release {
                        minifyEnabled false
                        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                    }
                }
    
                **dataBinding {
                    enabled = true
                }**
            }
    
            dependencies {
            implementation fileTree(dir: 'libs', include: ['*.jar'])
                implementation 'com.android.support:appcompat-v7:28.0.0'
                implementation 'com.android.support.constraint:constraint-layout:1.1.3'
                testImplementation 'junit:junit:4.12'
            .....
            }
    
            Step 2:
            Binding Can be done with Name of the .xml file as below example..
            Simply name of the xml file and prefix with binding...
    
            Example 1:
            if of your .xml file is activity_main.xml then Binding file should be MainActivityBinding
            Example 2:
            if of your .xml file is android_sunil.xml then Binding file should be AndroidSunilBinding
    
        Step 3: Sample Code:
    
        public class BaseObservableActivity extends AppCompatActivity {
    
                private ActivityBaseobservableBinding activityMainBinding;
            @Override
            protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_baseobservable);
    
            }
        }
    
    In the above code my .xml file name is activity_baseobservable so my binding class should be ActivityBaseobservableBinding activityMainBinding
    
    
    --Happy Android Coding@Ambilpura
    

    【讨论】:

    • 这应该是正确答案
    【解决方案4】:

    当我第一次遇到这个错误时,我创建了一个名为 a.xml 的布局,然后我创建了一个这样的 Activity

    public class ABinding extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ABinding binding = DataBindingUtil.setContentView(this, R.layout.a);
        }
    
    }
    

    并发生此错误。 最后我发现类 ABinding 是在 /build 中自动生成的,所以名称为 ABinding 的活动将覆盖自动生成的类

    所以我重命名了 Activity 并且错误消失了

    【讨论】:

      【解决方案5】:

      添加这是你的 build.gradle(Module:app) 文件

      安卓{

      dataBinding {
          enabled true
      }
      

      }

      【讨论】:

        【解决方案6】:
        Go to layout "main_activity.xml"
        Click right -> Refactor -> Rename
        Rename the layout to "main_activity_new.xml" or anything you want
        Again rename it to normal "main_activity.xml"
        

        它为我修好了!

        【讨论】:

          【解决方案7】:

          在 build.gradle 中添加这个

             android{
           ....
              dataBinding 
                { 
               enabled = true
                 }
          ...
              }
          

          【讨论】:

            【解决方案8】:

            如果上述所有解决方案都不起作用,请转到您的 .gradle 文件夹 > 缓存 并删除名称以 transforms 开头的所有文件夹,即 transforms-1 &变换-2。这对我有用

            【讨论】:

              【解决方案9】:

              您应该使用 ActivityMainBinding 代替您的 Activity 类名。

              ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_checklists);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-05-05
                • 2020-02-16
                • 2016-03-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-15
                相关资源
                最近更新 更多