数据绑定Android - 类型参数T具有不兼容的上限:ViewDataBinding和MainActivity [英] Data Binding Android - Type parameter T has incompatible upper bounds : ViewDataBinding and MainActivity
问题描述
我正在使用Android Studio 2.0 Preview 4.
我正在使用Android SDK工具25 rc1。无论我清理/重建项目多少次,此错误仍然存在。 File-> Invalidate缓存并重新启动也不起作用。
我无法运行最基本的数据绑定示例。
build.gradle文件
应用插件:'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion23.0.2
defaultConfig {
applicationIdcom.example.chiragshenoy.myapplication
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName1.0
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
}
依赖关系{
compile fileTree(dir: 'libs'包括:['* .jar'])
testCompile'junit:junit:4.12'
compile'com.android.support:appcompat-v7:23.1.1'
编译'com.android.support:design:23.1.1'
}
MainActivity.java
package com.example.chiragshenoy.myapplication;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
MainActivity binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
用户user =新用户(测试,用户);
binding.setUser(user);
}
@Override
public boolean onCreateOptionsMenu(菜单菜单){
//充满菜单;如果存在,则会将项目添加到操作栏。
getMenuInflater()。inflate(R.menu.menu_main,menu);
返回true;
}
activity_main.xml
<?xml version =1.0encoding =utf-8?>
< layout xmlns:android =http://schemas.android.com/apk/res/android>
< data>
< variable name =usertype =com.example.chiragshenoy.myapplication.User/>
< / data>
< LinearLayout
android:orientation =vertical
android:layout_width =match_parent
android:layout_height =match_parent>
< TextView android:layout_width =wrap_content
android:layout_height =wrap_content
android:text =@ {user.firstName}/>
< TextView android:layout_width =wrap_content
android:layout_height =wrap_content
android:text =@ {user.lastName}/>
< / LinearLayout>
< / layout>
这是我的顶级build.gradle文件
//顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。
/ pre>
buildscript {
repositories {
jcenter()
}
依赖关系{
classpath'com.android.tools.build:gradle: 2.0.0-alpha3'
//注意:请勿在此处放置应用程序依赖项;它们属于
//在单个模块中build.gradle文件
}
}
allprojects {
repositories {
jcenter()
}
}
任务清理(类型:删除){
删除rootProject.buildDir
}
解决方案如果你的毕业生版本是好的(1.5+),那么你应该尝试这样:
- 转到你的some_layout.xml
- 点击右键 - > Refactor - >重命名(或SHIFT + F6) li>
- 将您的布局重命名为some_layout2.xml,例如
- 将此文件重命名为原来的some_layout.xml
这可能会解决问题。让我们知道。
I am using Android Studio 2.0 Preview 4. I'm using Android SDK tools 25 rc1. This error persists no matter how many times I clean / rebuild project. File->Invalidate Caches and restart also doesn't work. I'm not able to run the most basic example of data binding.
build.gradle file
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.example.chiragshenoy.myapplication" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dataBinding { enabled = true } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' }
MainActivity.java
package com.example.chiragshenoy.myapplication; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainActivity binding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("Test", "User"); binding.setUser(user); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.chiragshenoy.myapplication.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.lastName}"/> </LinearLayout> </layout>
this is my top level build.gradle file
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-alpha3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
解决方案If your gradle version is ok (1.5+) then you should try this:
- Go to your "some_layout.xml"
- Click right -> Refactor -> Rename (or SHIFT + F6)
- Rename your layout to "some_layout2.xml" for example
- Rename this file back to the original "some_layout.xml"
This might fix the problem. Let us know.
这篇关于数据绑定Android - 类型参数T具有不兼容的上限:ViewDataBinding和MainActivity的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!