您的内容必须具有一个ListView,其ID属性为“ android.R.id.list”


156

我已经创建了一个像这样的xml文件:

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

和一项活动:

public class ExampleActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainlist);
    }
}

如您所见,我没有做任何其他事情。但是我得到了错误:

您的内容必须具有一个ListView,其ID属性为“ android.R.id.list”

即使我android:id="@+id/list"在xml中有一行。

问题是什么?

Answers:


345

像这样重命名ListView的ID,

<ListView android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

由于您使用ListActivity的是xml文件,因此在提及ID时必须指定关键字android

如果您需要自定义,ListView则无需扩展a ListActivity,而只需扩展an,Activity并且应该具有相同的id,而没有关键字android


4
这样做确实解决了我的问题,谢谢。但是我不知道您是否愿意写一些解释性说明ListView何时必须具有ID“ @android:id / list”以及何时可以使用任意名称。这是因为我不仅想解决我的问题,而且想了解为什么需要修复。
RenniePet

4
作品。但是,为什么这个具有ID的“游戏”取决于视图展示次数?
ses 2013年

1
当我添加时@android,Eclipse说list cannot be resolved or is not a field
2014年

1
相同的问题也显示出错误:错误:找不到与给定名称匹配的资源(在“ id”处,值为“ @android:id / list_interestsent”)。

1
感谢您的精彩回答!
酿酒学

23

您的mainlist.xml文件中应具有一个listview ,ID为@android:id/list

<ListView
    android:id="@android:id/list"
    android:layout_height="wrap_content"
    android:layout_height="fill_parent"/>

15
<ListView android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

这应该可以解决您的问题


8

正是基于上述反馈,我才解决了此问题,因为我一开始无法使其正常工作:

activity_main.xml:

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

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addPreferencesFromResource(R.xml.preferences);

preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
    android:key="upgradecategory"
    android:title="Upgrade" >
    <Preference
        android:key="download"
        android:title="Get OnCall Pager Pro"
        android:summary="Touch to download the Pro Version!" />
</PreferenceCategory>
</PreferenceScreen>

4

继承Activity Class而不是ListActivity可以解决此问题。

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mainlist);
    }
}

1
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>

0

影响我的另一件事:如果您有多个测试设备,请确保对设备使用的布局进行了更改。就我而言,我花了一段时间对“ layout”目录中的xml进行了更改,直到发现我的大型手机(在测试中途切换到一半)正在使用“ layout-sw360dp”目录中的xml。rr!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.