Android ListActivity突然破了,找不到android.R.id.list即使它在那里

时间:2014-01-13 16:57:10

标签: java android android-layout android-listview listactivity

我意识到其中许多问题都浮现在那里,但我从来没有找到任何有我确切问题的人。

据我所知,我做得对,昨天也有效。今天我正在研究我的应用程序的其他部分,并想测试它。现在我得到这个令人讨厌的错误,它无法找到id为android.R.id.list的列表,但同样,它似乎就在那里。

对应用程序其他部分的任何更改是否都会导致这种情况,在这种情况下,如何? 任何人都可以看到错误,因为我肯定不能。

我非常绝望,因为这是一个学校项目,很快就会到期。 感谢大家,感谢您的时间!

(在MainActivity.java中)

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

(activity_main.xml中)

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

</ListView>

LOGCAT根据要求:

01-13 19:00:48.852: W/dalvikvm(25254): threadid=1: thread exiting with uncaught exception (group=0x40e6da08)
01-13 19:00:48.857: E/AndroidRuntime(25254): FATAL EXCEPTION: main
01-13 19:00:48.857: E/AndroidRuntime(25254): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.ajhansen.meetme/org.ajhansen.meetme.MainActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2463)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.ActivityThread.access$600(ActivityThread.java:162)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1366)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.os.Looper.loop(Looper.java:158)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.ActivityThread.main(ActivityThread.java:5751)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at java.lang.reflect.Method.invokeNative(Native Method)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at java.lang.reflect.Method.invoke(Method.java:511)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at dalvik.system.NativeStart.main(Native Method)
01-13 19:00:48.857: E/AndroidRuntime(25254): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.ListActivity.onContentChanged(ListActivity.java:243)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:345)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.Activity.setContentView(Activity.java:1929)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at org.ajhansen.meetme.MainActivity.onCreate(MainActivity.java:72)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.Activity.performCreate(Activity.java:5165)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1103)
01-13 19:00:48.857: E/AndroidRuntime(25254):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2419)
01-13 19:00:48.857: E/AndroidRuntime(25254):    

... 11更多

3 个答案:

答案 0 :(得分:1)

很多人因R文件生成不正确等而出错。我通常尝试的其他人建议的是Clean动作。如果这不起作用,请浏览所有xml文件并对它们进行精细梳理,导致任何小错误丢失&lt;或者&gt;可能导致R文件中断。如果失败,删除工作项目但将文件保存在磁盘上,然后从现有代码创建一个新项目(假设您正在使用eclipse)并找到项目文件夹的路径。确保勾选复制到工作区,这通常可以解决我的问题。

答案 1 :(得分:0)

您发布的代码似乎没有任何问题。它工作正常。但是,我能够通过更改activity_main.xml的内容来重现与您所获得的相同的错误,即使用@android:id/list作为其ID的除了ListView以外的任何内容。因此,我猜想在setContentView期间不会以某种方式提取正确的布局文件。为了检查布局文件的内容,您可以尝试用此替换onCreate代码,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    XmlPullParser xpp = getResources().getLayout(R.layout.activity_main);
    int eventType;
    try {
        eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {
                Log.d("DEBUG_TAG", "Start tag " + xpp.getName());
            }
            eventType = xpp.next();
        }
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    setContentView(R.layout.activity_main);
}

用您选择的标签替换“DEBUG_TAG”以查看LogCat中的输出。如果获取了正确的布局,那么您应该在LogCat中获得类似于以下内容的内容。

  

01-14 00:43:00.671:D / DEBUG_TAG(29931):开始标记ListView

答案 2 :(得分:-1)

尝试

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

加载列表视图,如

ListView mlist = (ListView)findViewById(R.id.list);

然后清理你的项目并检查。