Android应用程序因奇怪错误而崩溃

时间:2013-01-10 12:19:36

标签: android android-layout android-listview

我有启动ListActivity的按钮,但每次点击它时,应用程序都会崩溃并出现以下LogCat错误:

01-10 13:12:51.327: E/AndroidRuntime(2970): FATAL EXCEPTION: main
01-10 13:12:51.327: E/AndroidRuntime(2970): java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.app/com.app.Settings}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

这是xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/background"
android:orientation="vertical"
android:padding="15dip" >

<ListView
    android:id="@+id/listViewSettings"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

这是Java代码:

import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class Settings extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        ArrayList<String> listItems=new ArrayList<String>();
        listItems.add("foo");
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                listItems);
            setListAdapter(adapter);
    }

}

我已尝试将列表ID更改为list,但如果我这样做,则会收到以下错误:

If I do this I get the following error: `Error: No resource found that matches the given name (at 'id' with value '@id/list').`

3 个答案:

答案 0 :(得分:2)

XML中的这一行:

android:id="@+id/listViewSettings"

......必须是这样的:

android:id="@android:id/list"

为什么呢?好吧,ListActivity要求您使用ID“android.R.id.list”,如果您希望它保持ListView(使用ListFragment时同样适用)。

答案 1 :(得分:2)

ListActivity不要求您通过setContentView()方法为其分配布局,如果您只想显示ListView ListActivity默认包含ListView。

如果您需要在ListActivity中包含比ListView更多的视图,您仍然可以为您的活动分配布局。在这种情况下,您的布局必须包含一个List android:id属性设置为@android:id/list

因此,请将您的列表ID更改为:

android:id="@android:id/list"

答案 2 :(得分:1)

只需更改您的xml ListView-id

即可
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>

在这种情况下,您的布局必须包含ListViewandroid:id属性设置为@android:id/list