3

この質問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>

アプリケーションがクラッシュする原因となる競合について説明していただけますか?

4

1 に答える 1

4

@android:id/listリンク先の質問にあるように、id を持つ 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 レイアウトから。

XML タグ内の ID の構文は次のとおりです。

android:id="@+id/my_button"

文字列の先頭にあるアットマーク (@) は、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 に答える