Data Binding Android - Type parameter T has incompatible upper bounds : ViewDataBinding and MainActivity

30,537

Solution 1

If your gradle version is ok (1.5+) then you should try this:

  1. Go to your "some_layout.xml"
  2. Click right -> Refactor -> Rename (or SHIFT + F6)
  3. Rename your layout to "some_layout2.xml" for example
  4. Rename this file back to the original "some_layout.xml"

This might fix the problem. Let us know.

Solution 2

This solution worked for me "File -> Invalidate Caches / Restart" https://stackoverflow.com/a/32191257/2205809

Solution 3

There is a simple solution.

  1. click "File" on toolbar of android studio
  2. click "Invalidate Caches and Restart", then it works.

Hope this answer will help you.

Solution 4

You should use:

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

In onCreate

MainActivity isn't the generated Binding class.

Solution 5

I just thought based on Felipe Gualberto's Answer and I got solution difference way.

If you have written multiple views with the same id in different XML then make it unique.

Thank you.

Share:
30,537
Chirag Shenoy
Author by

Chirag Shenoy

{ Mobile Developer }

Updated on July 08, 2022

Comments

  • Chirag Shenoy
    Chirag Shenoy almost 2 years

    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
    }