尽管在这个问题How to add a button to PreferenceScreen中@stealthcopter的评论内容(检查@Andrew的回答),但我无法在活动的底部看到一个按钮。
应用程序.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>
请您解释一下导致应用程序崩溃的冲突是什么?
答案 0 :(得分:4)
您必须在链接到的问题中包含一个ID为@android:id/list
的ListView(参见Answer)。
从您的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 Layouts。
XML标记内的ID语法为:
机器人:ID = “@ + ID / my_button”
字符串开头的at符号(@)表示XML解析器应解析并扩展ID字符串的其余部分,并将其标识为ID资源。加号(+)表示这是一个新的资源名称,必须创建并添加到我们的资源中(在R.java文件中)。 Android框架提供了许多其他ID资源。引用Android资源ID时,您不需要加号,但必须添加android包命名空间,如下所示:
机器人:ID = “@机器人:ID /空”
使用android包命名空间,我们现在引用android.R资源类中的ID,而不是本地资源类。