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; } }
解决方案
修正View Binding类引用
你的布局文件是activity_main_cake_items.xml,对应的自动生成Binding类应为ActivityMainCakeItemsBinding,而非当前使用的ActivityMainBinding。按以下步骤修改:- 替换导入语句:
import com.example.dessertshop.databinding.ActivityMainCakeItemsBinding; - 修改类中Binding变量定义:
ActivityMainCakeItemsBinding binding; - 修正onCreate中的初始化代码:
binding = ActivityMainCakeItemsBinding.inflate(getLayoutInflater());
- 替换导入语句:
修复XML注释语法错误
XML中不能使用//注释,需将布局里的错误注释改为XML标准格式:<!-- Here it should get the value of the variable from -->重新编译项目
点击Android Studio菜单栏的Build > Rebuild Project,让系统重新生成正确的Binding类,之后报错即可消失。
内容的提问来源于stack exchange,提问作者Mou Rani Biswas
相关产品推荐
相关产品推荐

