You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java中ListView关联报错:无法解析符号'listviewCakes'

问题:无法通过View Binding获取ListView的ID(报错Cannot resolve symbol 'listviewCakes')

已正确关联ListAdapter及list-item组件,但程序无法识别activity_main_cake_items.xml中定义的listviewCakes ID,编译时报错:

Cannot resolve symbol 'listviewCakes'

相关代码文件

MainCakeItems.java

package com.example.dessertshop;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;

import com.example.dessertshop.databinding.ActivityMainBinding;

import java.util.ArrayList;

public class MainCakeItems extends AppCompatActivity {
    ActivityMainBinding binding;
    ListAdapterCakes listAdapterCakes;
    ArrayList<ListDataCakes> dataCakesArrayList = new ArrayList<>();
    ListDataCakes listDataCakes;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
//        setContentView(R.layout.activity_main_cake_items);
        setContentView(binding.getRoot());

        int[] imageCakeList = {R.drawable.vanilla_cake, R.drawable.chocolate_cake, R.drawable.strawberry_cake};
        int[] idCakeList = {R.string.vanillaCakeId, R.string.chocolateCakeId, R.string.strawberryCakeId};
        int[] titleCakeList = {R.string.vanillaCakeTitle, R.string.chocolateCakeTitle, R.string.strawberryCakeTitle};
        int[] detailsCakeList = {R.string.vanillaCakeDetails, R.string.chocolateCakeDetails, R.string.strawberryCakeDetails};
        String[] titleList = {"Vanilla Cake", "Chocolate Cake", "Strawberry Cake"};
        String[] idList = {"01", "02", "03"};

        for (int i = 0; i < imageCakeList.length; i++) {
            listDataCakes = new ListDataCakes(titleList[i],idList[i], imageCakeList[i],idCakeList[i], titleCakeList[i], detailsCakeList[i]);
            dataCakesArrayList.add(listDataCakes);
        }
        listAdapterCakes = new ListAdapterCakes(MainCakeItems.this,dataCakesArrayList);
        binding.listviewCakes.setAdapter(listAdapterCakes);             // ERROR
        binding.listviewCakes.setClickable(true);                       // ERROR

        binding.listviewCakes.setOnItemClickListener(new AdapterView.OnItemClickListener() {  // ERROR
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
                Intent intent = new Intent(MainCakeItems.this, DetailsCakes.class);
                intent.putExtra("image", imageCakeList[i]);
                intent.putExtra("id", idCakeList[i]);
                intent.putExtra("title", titleCakeList[i]);
                intent.putExtra("details", detailsCakeList[i]);
                intent.putExtra("title", titleList[i]);
                intent.putExtra("id", idList[i]);
                startActivity(intent);
            }
        });
    }
}

activity_main_cake_items.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    android:background="@drawable/background_image"
    tools:context=".MainCakeItems">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listviewCakes"   // Here it should get the value of the variable from
        android:scrollbars="vertical"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="10dp"
        android:layout_marginTop="12dp"
        tools:listitem="@layout/list_item_cakes"
        android:divider="@android:color/transparent"
        android:dividerHeight="10.0sp">
    </ListView>

</androidx.constraintlayout.widget.ConstraintLayout>

ListAdapterCakes.java

package com.example.dessertshop;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;

public class ListAdapterCakes extends ArrayAdapter<ListDataCakes> {

    public ListAdapterCakes(@NonNull Context context, ArrayList<ListDataCakes> dataCakesArrayList) {
        super(context, R.layout.list_item_cakes, dataCakesArrayList);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View view, @NonNull ViewGroup parent) {
        ListDataCakes listDataCakes = getItem(position);

        if (view == null) {
            view = LayoutInflater.from(getContext()).inflate(R.layout.list_item_cakes, parent, false);
        }

        ImageView listImageCakes = view.findViewById(R.id.listImageCakes);
        TextView listTitleCakes = view.findViewById(R.id.listTitleCakes);
//        TextView listDetails = view.findViewById(R.id.listCakeDetails);
        TextView listCakesId = view.findViewById(R.id.listCakesId);

        listImageCakes.setImageResource(listDataCakes.image);
        listTitleCakes.setText(listDataCakes.title);
//        listDetails.setText(listDataCakes.details);
        listCakesId.setText(listDataCakes.id);

        return view;
    }
}

解决方案

  1. 修正View Binding类引用
    你的布局文件是activity_main_cake_items.xml,对应的自动生成Binding类应为ActivityMainCakeItemsBinding,而非当前使用的ActivityMainBinding。按以下步骤修改:

    • 替换导入语句:
      import com.example.dessertshop.databinding.ActivityMainCakeItemsBinding;
      
    • 修改类中Binding变量定义:
      ActivityMainCakeItemsBinding binding;
      
    • 修正onCreate中的初始化代码:
      binding = ActivityMainCakeItemsBinding.inflate(getLayoutInflater());
      
  2. 修复XML注释语法错误
    XML中不能使用//注释,需将布局里的错误注释改为XML标准格式:

    <!-- Here it should get the value of the variable from -->
    
  3. 重新编译项目
    点击Android Studio菜单栏的Build > Rebuild Project,让系统重新生成正确的Binding类,之后报错即可消失。


内容的提问来源于stack exchange,提问作者Mou Rani Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:24:56