最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - textView id can't resolve on View Binding - Stack Overflow

programmeradmin3浏览0评论

Noob question here. I get a cannot find symbol error message for this line, actually I don't even have to run the code, the IDE complains before. textviewFirst is unknown to it.

TextView textView = binding.textviewFirst;

Here is the MainActivity.java file:

package com.example.rp;

import android.os.Bundle;

import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;

import android.view.View;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.example.rp.databinding.ActivityMainBinding;

import android.view.Menu;
import android.view.MenuItem;

import com.example.rp.ApiService;
import com.example.rp.Post;

import java.util.List;

import retrofit2.Retrofit;  // Import Retrofit
import retrofit2.converter.gson.GsonConverterFactory;

import retrofit2.Call;  // Import Call
import retrofit2.Callback;  // Import Callback
import retrofit2.Response;  // Import Response

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration appBarConfiguration;
    private ActivityMainBinding binding;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        //TextView textView = findViewById(R.id.textview_first);
        TextView textView = binding.textviewFirst;
        setSupportActionBar(binding.toolbar);

        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
        appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

        binding.fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAnchorView(R.id.fab)
                        .setAction("Action", null).show();
            }
        });

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("/")  // Base URL
                .addConverterFactory(GsonConverterFactory.create())  // Gson converter for JSON parsing
                .build();

// Create the API service instance
        ApiService apiService = retrofit.create(ApiService.class);

// Make the network request
        Call<List<Post>> call = apiService.getPosts();

// Execute the call (synchronously for simplicity here)
        call.enqueue(new Callback<List<Post>>() {
            @Override
            public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                if (response.isSuccessful()) {
                    List<Post> posts = response.body();  // Get the list of users
                    try {
                        textView.setText(posts.toString());

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //
                    // Handle the response here
                }
            }

            @Override
            public void onFailure(Call<List<Post>> call, Throwable t) {
                // Handle failure
            }
        });
    }

    @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;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
        return NavigationUI.navigateUp(navController, appBarConfiguration)
                || super.onSupportNavigateUp();
    }
}

The textView itself is defined in fragment_first.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView 
xmlns:android=";
xmlns:app=";
xmlns:tools=";
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstFragment">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <Button
        android:id="@+id/button_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/next"
        app:layout_constraintBottom_toTopOf="@id/textview_first"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textview_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="@string/lorem_ipsum"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button_first" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

The strange thing is that it can resolve when I do like this:

//TextView textView = findViewById(R.id.textview_first);

Noob question here. I get a cannot find symbol error message for this line, actually I don't even have to run the code, the IDE complains before. textviewFirst is unknown to it.

TextView textView = binding.textviewFirst;

Here is the MainActivity.java file:

package com.example.rp;

import android.os.Bundle;

import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;

import android.view.View;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.example.rp.databinding.ActivityMainBinding;

import android.view.Menu;
import android.view.MenuItem;

import com.example.rp.ApiService;
import com.example.rp.Post;

import java.util.List;

import retrofit2.Retrofit;  // Import Retrofit
import retrofit2.converter.gson.GsonConverterFactory;

import retrofit2.Call;  // Import Call
import retrofit2.Callback;  // Import Callback
import retrofit2.Response;  // Import Response

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration appBarConfiguration;
    private ActivityMainBinding binding;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        //TextView textView = findViewById(R.id.textview_first);
        TextView textView = binding.textviewFirst;
        setSupportActionBar(binding.toolbar);

        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
        appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

        binding.fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAnchorView(R.id.fab)
                        .setAction("Action", null).show();
            }
        });

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode/")  // Base URL
                .addConverterFactory(GsonConverterFactory.create())  // Gson converter for JSON parsing
                .build();

// Create the API service instance
        ApiService apiService = retrofit.create(ApiService.class);

// Make the network request
        Call<List<Post>> call = apiService.getPosts();

// Execute the call (synchronously for simplicity here)
        call.enqueue(new Callback<List<Post>>() {
            @Override
            public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                if (response.isSuccessful()) {
                    List<Post> posts = response.body();  // Get the list of users
                    try {
                        textView.setText(posts.toString());

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //
                    // Handle the response here
                }
            }

            @Override
            public void onFailure(Call<List<Post>> call, Throwable t) {
                // Handle failure
            }
        });
    }

    @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;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
        return NavigationUI.navigateUp(navController, appBarConfiguration)
                || super.onSupportNavigateUp();
    }
}

The textView itself is defined in fragment_first.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView 
xmlns:android="http://schemas.android/apk/res/android"
xmlns:app="http://schemas.android/apk/res-auto"
xmlns:tools="http://schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstFragment">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <Button
        android:id="@+id/button_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/next"
        app:layout_constraintBottom_toTopOf="@id/textview_first"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textview_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="@string/lorem_ipsum"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button_first" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

The strange thing is that it can resolve when I do like this:

//TextView textView = findViewById(R.id.textview_first);
Share Improve this question asked Mar 30 at 21:00 Anunnaki PriestAnunnaki Priest 154 bronze badges 2
  • 2 Bindings are working as intended here - your activity inflates ActivityMainBinding but you're trying to reach a view from FragmentFirstBinding. You can forcefully findviewbyid to get into it but it's circumventing the bindings and bad practice. – Pawel Commented Mar 30 at 21:59
  • Please trim your code to make it easier to find your problem. Follow these guidelines to create a minimal reproducible example. – Community Bot Commented Mar 31 at 15:34
Add a comment  | 

1 Answer 1

Reset to default 1

You are getting Unresolved reference and it is because you are trying to access it from MainActivity class, but the TextView you are trying to access is in FirstFragment class.

Either declare the textView in you activity_main.xml or try to access it in the fragment class.

发布评论

评论列表(0)

  1. 暂无评论