2011-08-04 54 views
2

我正在使我的偏好看起來更好一點。我正在使用IconPreferenceScreen類爲它們中的每一個添加圖標,但是當我將所有PreferenceScreen更改爲IconPreferenceScreen時,有些人會給我一個關閉的力量。爲什麼我的PreferenceScreen導致一個力量關閉?

我顯示的第一個選項完美,但第二個關閉。

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:icon="http://schemas.android.com/apk/res/com.andrew.notifyme" 
android:key="preference_screen" 
android:title="@string/app_name_formatted"> 
<PreferenceCategory 
    android:key="test_app_category" 
    android:title="@string/test_text"> 
<com.andrew.notifyme.preferences.IconPreferenceScreen 
     android:key="test_app" 
     android:title="@string/test_text" 
     icon:icon="@drawable/ic_test" 
     android:dependency="app_enabled" >  
</com.andrew.notifyme.preferences.IconPreferenceScreen>                 
</PreferenceCategory>  

<PreferenceCategory 
android:key="basic_settings_category" 
android:title="@string/basic_settings_text"> 
<com.andrew.notifyme.preferences.IconPreferenceScreen 
    android:key="basic_settings_screen" 
    android:title="Themes" 
    icon:icon="@drawable/ic_test" 
    android:dependency="app_enabled" >  
<PreferenceScreen 
     android:key="quick_reply_settings_screen" 
     android:title="@string/quick_reply_settings_text" 
     android:dependency="app_enabled"> 
<CheckBoxPreference 
      android:key="quick_reply_save_draft_enabled" 
      android:title="@string/preference_save_draft_enabled_title" 
      android:summaryOn="@string/preference_save_draft_enabled_summaryOn" 
      android:summaryOff="@string/preference_save_draft_enabled_summaryOff" 
      android:defaultValue="true" /> 
</com.andrew.notifyme.preferences.IconPreferenceScreen> 
</PreferenceScreen> 
</PreferenceCategory> 

堆棧跟蹤:

08-04 01:06:50.697: ERROR/AndroidRuntime(9683): FATAL EXCEPTION: main 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andrew.notifyme/com.andrew.notifyme.preferences.MainPreferenceActivity}: java.lang.ClassCastException: com.andrew.notifyme.preferences.IconPreferenceScreen 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.os.Looper.loop(Looper.java:130) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.app.ActivityThread.main(ActivityThread.java:3835) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at dalvik.system.NativeStart.main(Native Method) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683): Caused by: java.lang.ClassCastException: apps.droidnotify.preferences.IconPreferenceScreen 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.GenericInflater.rInflate(GenericInflater.java:488) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.GenericInflater.rInflate(GenericInflater.java:493) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.GenericInflater.rInflate(GenericInflater.java:493) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.GenericInflater.inflate(GenericInflater.java:326) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.GenericInflater.inflate(GenericInflater.java:263) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:251) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:262) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at com.andrew.notifyme.preferences.MainPreferenceActivity.onCreate(MainPreferenceActivity.java:103) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722) 
08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  ... 11 more 

其中拋出異常代碼:

public class MainPreferenceActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { 

//Google Market URL 
private static final String RATE_APP_ANDROID_URL = "http://market.android.com/details?id=com.andrew.notifyme"; 
//Amazon Appstore URL 
private static final String RATE_APP_AMAZON_URL = "http://www.amazon.com/gp/mas/dl/android?p=com.andrew.notifyme"; 

private static final String APP_ENABLED_KEY = "app_enabled"; 
private static final String CALENDAR_NOTIFICATIONS_ENABLED_KEY = "calendar_notifications_enabled"; 
private static final String LANDSCAPE_SCREEN_ENABLED_KEY = "landscape_screen_enabled"; 
private static final String CALENDAR_SELECTION_KEY = "calendar_selection"; 
private static final String CALENDAR_POLLING_FREQUENCY_KEY = "calendar_polling_frequency"; 

private static final int NOTIFICATION_TYPE_TEST = -1; 

private boolean _debug = false; 
private Context _context = null; 
private boolean _debugCalendar = false; 
private SharedPreferences _preferences = null; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    _debug = Log.getDebug(); 
    if (_debug) Log.v("MainPreferenceActivity.onCreate()"); 
    _debugCalendar = Log.getDebugCalendar(); 
    _context = MainPreferenceActivity.this; 
    _preferences = PreferenceManager.getDefaultSharedPreferences(_context); 
    _preferences.registerOnSharedPreferenceChangeListener(this); 
    //Don't rotate the Activity when the screen rotates based on the user preferences. 
    if(!_preferences.getBoolean(LANDSCAPE_SCREEN_ENABLED_KEY, false)){ 
     this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 
    addPreferencesFromResource(R.xml.preferences); 
    setupCustomPreferences(); 
    runOnceAlarmManager(); 
    setupAppDebugMode(_debug); 
    setupRateAppPreference(); 
    setupImportPreferences(); 
    runOnceEula(); 
} 
+0

如果你在模擬器中調試它,logcat會說什麼? –

+0

我將來自pastebin的堆棧跟蹤複製到問題中。請不要使用pastebin來處理像堆棧跟蹤這樣的小事,這是非常不方便的。 – EboMike

+0

你確定你不需要這個標籤,xmlns:android =「http://schemas.android.com/apk/res/android」 – ngesh

回答

0

我假設你正在運行薑餅,所以我在尋找在Android源代碼的Gingerbread版本。

你看

08-04 01:06:50.697: ERROR/AndroidRuntime(9683):  at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:251) 

所以,如果你看一下PreferenceManager.java here的251線,你會看到

rootPreferences = (PreferenceScreen) inflater.inflate(resId, rootPreferences, true); 

如果你看看充氣here的代碼,你」你會發現它會跳到P,在這種情況下,它是PreferenceScreen。所以它試圖將你的類強制轉換爲PreferenceScreen,但正如你所說,它擴展了Preference。

是否有可能讓您的類擴展PreferenceScreen? (僅憑這個名字來判斷,真的應該這樣開始!)。

+0

好吧,這並不容易。 PreferenceScreen是最終的,所以我必須做一些改變。 – adneal

+0

哎呦。好的。那麼你的實現實際上做了什麼? – EboMike

+0

我在導入/導出存儲的首選項時使用它。我現在真的比我剛開始的時候還差得遠。我想我可能會尋找一種不同的方式來將圖標添加到首選項。 – adneal

相關問題