如何解决Android中Cannot resolve symbol 'list'错误?
解决ListActivity中ListView ID与setListAdapter的冲突问题
问题根源
你遇到的「Cannot resolve symbol 'list'」是因为:
- 你将ListView的ID设为
@android:id/list,这是系统内置的资源ID,不属于你项目的R类,因此R.id.list无法被识别,必须用android.R.id.list来引用。 - 另外你的
ArrayAdapter构造参数存在错误:第二个参数传入了整个Activity的布局R.layout.activity_main,这里应该传入列表项的布局(而非页面布局)。
修正代码
修改MainActivity.java中的setListAdapter部分:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String[] dessert={"Chocolate Mousse", "Chocolate Cake", "Chocolate Macaroons", "Chocolate Cafe Website", "Dessert Selection"}; // 替换R.id.list为android.R.id.list,同时改用系统列表项布局 setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, dessert)); }
补充说明
android.R.layout.simple_list_item_1是Android系统提供的简单列表项布局,内部包含一个ID为android.R.id.text1的TextView,正好用来显示字符串数据。- 如果你想用自定义的列表项布局,需要自己创建一个布局文件(比如
list_item.xml),里面包含一个TextView,然后将ArrayAdapter的第二个参数改为R.layout.list_item,第三个参数改为自定义布局中TextView的ID。 - 如果你不想依赖系统ID,也可以放弃继承
ListActivity,改为继承AppCompatActivity,然后通过findViewById(R.id.your_custom_list_id)获取ListView实例,再调用setAdapter方法。
内容的提问来源于stack exchange,提问作者joby
相关产品推荐
相关产品推荐

