ViewBinding is not working in Second Screen[error: cannot find symbol import com.example.demoapp.databinding.DragAndDropBinding]

Viewed 1201

Basically I have a app with two Screen. ScreenOne and ScreenTwo. In the first Screen, i mean in MainActivity viewBinding is working fine. But on a perticular button click it will redirect to the second screen. Now there is the problem. the error massage is -

error: cannot find symbol import com.example.demoapp.databinding.DragAndDropBinding;

But in the first Screen It's working fine.

MainActivity[FirstScreen]

//Working Fine
package com.example.demoapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import com.example.demoapp.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
    private ActivityMainBinding binding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.dragOnly.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(v.getContext(), DragActivity.class);
                v.getContext().startActivity(intent);
            }

        });
    }
}

ActivityMain.xml file

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:orientation="vertical"
        android:layout_centerVertical="true">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/dragAndDrop"
            android:text="Drag and Drop"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Drag"
            android:id="@+id/dragOnly"/>

    </LinearLayout>

</RelativeLayout>

and the DragAndDropActivity[Second Screen]

//Showing error for import com.example.demoapp.databinding.DragAndDropBinding;
package com.example.demoapp;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.example.demoapp.databinding.ActivityMainBinding;
import com.example.demoapp.databinding.DragAndDropBinding; //Error 

public class DragActivity extends AppCompatActivity {
    TextView textView;
    DragAndDropBinding binding;
    float xPosition, yPosition, xPrevious, yPrevious;
    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drag_and_drop);
        textView = findViewById(R.id.dragButton);
        textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int point = event.getActionMasked();

                switch (point) {
                    case MotionEvent.ACTION_DOWN:

                    case MotionEvent.ACTION_UP:
                        xPrevious = event.getX();
                        yPrevious = event.getY();
                        return true;

                    case MotionEvent.ACTION_MOVE:
                        float dx = event.getX() - xPrevious;
                        float dy = event.getY() - yPrevious;

                        xPosition += dx;
                        yPosition += dy;

                        v.setX(xPosition - v.getWidth());
                        v.setY(yPosition - v.getHeight());

                        return true;

                    default:
                        return false;
                }

            }
        });
    }
}

DragAndDrop.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Drag Me any Where"
        android:textSize="25sp"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/dragButton"
        android:background="#056"
        android:padding="8dp"
        android:textColor="#FFF"/>

</RelativeLayout>

build.gradle[App]

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.example.demoapp"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    viewBinding {
        enabled = true
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

Android Studio version 3.6.1 and gradle plugin classpath 'com.android.tools.build:gradle:3.6.1'

1 Answers

I can see that you are actually not using ViewBinding in the second activity. You are just importing it generated class. Proguard obfuscates unused classes at runtime and it is thinking that you are not using your generated view binding class (which is right, you are just importing it.) so use it as you used in the first activity. It will work.

Related