簡體   English   中英

在Android中創建偏好活動

[英]Creating a Preference Activity In Android

我正在嘗試根據docs創建一個簡單的首選項活動屏幕。 我已經將其設置為在按下選項菜單按鈕時啟動,但是當我觸發它時,我的應用程序崩潰了,並且我收到了這個無用的運行時異常消息:

07-29 21:42:28.879: E/AndroidRuntime(13441): FATAL EXCEPTION: main
07-29 21:42:28.879: E/AndroidRuntime(13441): java.lang.RuntimeException: Unable to start activity ComponentInfo{myapp/myapp.ApplicationPreferenceActivity}: java.lang.ClassCastException: java.lang.Integer
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2737)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.access$2500(ActivityThread.java:129)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.os.Looper.loop(Looper.java:143)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.main(ActivityThread.java:4701)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at java.lang.reflect.Method.invokeNative(Native Method)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at java.lang.reflect.Method.invoke(Method.java:521)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at dalvik.system.NativeStart.main(Native Method)
07-29 21:42:28.879: E/AndroidRuntime(13441): Caused by: java.lang.ClassCastException: java.lang.Integer
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ContextImpl$SharedPreferencesImpl.getString(ContextImpl.java:2797)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.Preference.getPersistedString(Preference.java:1249)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.ListPreference.onSetInitialValue(ListPreference.java:232)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.Preference.dispatchSetInitialValue(Preference.java:1172)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at andr
oid.preference.Preference.onAttachedToHierarchy(Preference.java:984)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceGroup.addPreference(PreferenceGroup.java:156)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:97)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:38)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.GenericInflater.rInflate(GenericInflater.java:488)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.GenericInflater.inflate(GenericInflater.java:326)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.GenericInflater.inflate(GenericInflater.java:263)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:251)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:262)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at myapp.ApplicationPreferenceActivity.onCreate(ApplicationPreferenceActivity.java:71)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2701)
07-29 21:42:28.879: E/AndroidRuntime(13441):    ... 11 more

我的首選項配置文件很簡單:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:title="@string/preferences_title" >
    <ListPreference
        android:defaultValue="1"
        android:entries="@array/units_choices"
        android:entryValues="@array/units_values"
        android:key="units"
        android:summary="@string/units_summary"
        android:title="@string/units_title" />
</PreferenceScreen>

我分別在res / values / array.xml和res / values / array_values.xml中定義了units_choices和units_values,它們很簡單:

<resources
   xmlns:android="http://schemas.android.com/apk/res/android">
   <string-array
      name="units_choices">
      <item>Imperial (miles)</item>
      <item>Metric (meters)</item>
   </string-array>
</resources>

<resources
    xmlns:android="http://schemas.android.com/apk/res/android">
    <string-array name="units_values" translatable="false">
        <item>2</item>
        <item>1</item>
    </string-array>
</resources>

如果我注釋掉ListPreference標記,則會顯示首選項屏幕,並且我的應用程序不會崩潰,因此我假設ListPreference配置不正確。 我究竟做錯了什么? 我正在使用Eclipse IDE進行開發,它表明所有@引用均已滿足。 為什么會這樣一個標簽崩潰,整個應用程序?

這不是答案,但評論有點大。

我假設myapp.ApplicationPreferenceActivity.onCreate(ApplicationPreferenceActivity.java:71)是您的ApplicationPreferenceActivity中您要調用setContentView()的行? 因此,這是一個xml膨脹錯誤。

有關您的xml文件的幾件事。 您無需致電:

android:layout_width="match_parent"
android:layout_height="match_parent"

就像在docs的示例中一樣。

另外,您使用的是哪個API級別? 您是否知道從API級別11開始已經棄用了大部分PreferenceActivity類,現在改為使用PreferenceFragments? 因此,如果要支持Android 3.0之前的版本,可以使用PreferenceActivity,但是,如果要支持3.0及更高版本,則必須使用PreferenceFragments

1.首先,我看到ClassCastException ,當您嘗試將錯誤類型的對象推入UN兼容類型的對象引用變量時,將發生這種情況。 由於您尚未在此處放置代碼,因此我無法檢測到它。

2.在您學習“偏好活動”時,我建議您查看此鏈接

http://androidresearch.wordpress.com/2012/03/09/creating-a-preference-activity-in-android/

問題是由我在活動的onCreate中使用units_values設置默認unit首選項引起的,而units_values顯然也是字符串,即使它們也是整數。 當ListPreference嘗試將我的默認int作為字符串加載時,拋出了ClassCastException。

我在onCreate上修改了代碼以使用putString,清除了已安裝應用程序的數據,並解決了該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM