3

尽管@stealthcopter 的评论内容(检查@Andrew 的回答)在这个问题How to add a button to PreferenceScreen中,我无法在我的活动底部看到一个按钮。

应用程序 .apk 将崩溃并出现以下错误:Unfortunately your_app has stopped working!

这是崩溃的堆栈跟踪:

05-25 21:26:39.431: I/dalvikvm(1405): threadid=3: reacting to signal 3
05-25 21:26:39.462: I/dalvikvm(1405): Wrote stack traces to '/data/anr/traces.txt'
05-25 21:26:44.851: I/Process(1405): Sending signal. PID: 1405 SIG: 9
05-25 21:40:51.442: I/dalvikvm(1936): threadid=3: reacting to signal 3
05-25 21:40:51.601: I/dalvikvm(1936): Wrote stack traces to '/data/anr/traces.txt'
05-25 21:40:51.951: I/dalvikvm(1936): threadid=3: reacting to signal 3
05-25 21:40:52.001: I/dalvikvm(1936): Wrote stack traces to '/data/anr/traces.txt'
05-25 21:40:52.472: I/dalvikvm(1936): threadid=3: reacting to signal 3
05-25 21:40:52.561: I/dalvikvm(1936): Wrote stack traces to '/data/anr/traces.txt'
05-25 21:40:52.631: D/dalvikvm(1936): GC_CONCURRENT freed 172K, 4% free 9313K/9607K, paused 7ms+7ms
05-25 21:40:52.691: D/gralloc_goldfish(1936): Emulator without GPU emulation detected.
05-25 21:40:54.372: D/AndroidRuntime(1936): Shutting down VM
05-25 21:40:54.372: W/dalvikvm(1936): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-25 21:40:54.422: E/AndroidRuntime(1936): FATAL EXCEPTION: main
05-25 21:40:54.422: E/AndroidRuntime(1936): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.DVA_HLUI/com.DVA_HLUI.DVA_HLUIPrefsActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1797)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.widget.TabHost.setCurrentTab(TabHost.java:346)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.view.View.performClick(View.java:3511)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.view.View$PerformClick.run(View.java:14105)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.os.Handler.handleCallback(Handler.java:605)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.os.Looper.loop(Looper.java:137)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.ActivityThread.main(ActivityThread.java:4424)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at java.lang.reflect.Method.invokeNative(Native Method)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at java.lang.reflect.Method.invoke(Method.java:511)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at dalvik.system.NativeStart.main(Native Method)
05-25 21:40:54.422: E/AndroidRuntime(1936): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.ListActivity.onContentChanged(ListActivity.java:243)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.preference.PreferenceActivity.onContentChanged(PreferenceActivity.java:944)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:254)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.Activity.setContentView(Activity.java:1835)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at com.DVA_HLUI.DVA_HLUIPrefsActivity.onCreate(DVA_HLUIPrefsActivity.java:15)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.Activity.performCreate(Activity.java:4465)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-25 21:40:54.422: E/AndroidRuntime(1936):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-25 21:40:54.422: E/AndroidRuntime(1936):     ... 18 more

这是崩溃的活动java类:

public class DVA_HLUIPrefsActivity extends PreferenceActivity 
{
   @Override
   public void onCreate(Bundle savedInstanceState) 
   { 
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
        setContentView(R.layout.preferences);
   }
}

这是它的布局文件:

<?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:orientation="vertical">

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Quit!" android:layout_weight="0.5"android:layout_gravity="center_vertical"
         />

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Help" android:layout_weight="0.5" android:layout_gravity="center_vertical"
         />

    </LinearLayout>

</LinearLayout>

最后这是首选项 xml 资源:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <Preference android:key="about" android:title="@string/titleAbout" android:summary="@string/summaryAbout" />


</PreferenceScreen>

你能解释一下导致应用程序崩溃的冲突是什么吗?

4

1 回答 1

4

您必须包含一个带有 ID 的 ListView,@android:id/list就像它在您链接到的问题中所说的那样(参见答案)。

从您的 android 布局文件 (R.Layout.Preferences) 中删除您的<ListView>并将其放在它的位置。

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

那应该可以解决您遇到的问题。

从您发布的 LogCat 中: Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'


编辑:只是对 ListView 上的 id 属性的一些说明。来自Android XML 布局

XML 标记内的 ID 语法为:

android:id="@+id/my_button"

字符串开头的 at 符号 (@) 表示 XML 解析器应该解析和扩展 ID 字符串的其余部分,并将其标识为 ID 资源。加号 (+) 表示这是一个新资源名称,必须创建并添加到我们的资源中(在 R.java 文件中)。Android 框架提供了许多其他 ID 资源。引用 Android 资源 ID 时,不需要加号,但必须添加 android 包命名空间,如下所示:

android:id="@android:id/empty"

有了 android 包命名空间,我们现在引用 android.R 资源类的 ID,而不是本地资源类。

于 2012-05-25T19:56:40.753 回答