2011-08-04 2 views
2

나는 환경 설정을 좀 더 멋지게 보이게하는 과정에있다. IconPreferenceScreen 클래스를 사용하여 각각에 아이콘을 추가하고 있습니다 만, 모든 PreferenceScreens를 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에서 스택 추적을 질문에 복사했습니다. Stack Trace와 같은 작은 것에는 pastebin을 사용하지 마십시오. 큰 불편입니다. – EboMike

+0

xmlns : android = "http://schemas.android.com/apk/res/android"이 태그가 필요하지 않습니까? – ngesh

답변

0

난 당신이 진저 브레드를 실행하는 가정, 내가 찾고 있어요 안드로이드 소스 코드의 진저 브레드 버전에서.

당신은 당신이 PreferenceManager.java here 라인 (251)를 보면 당신은 인플레이터 here의 코드를 보면 그래서, 당신은

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

를 볼 수 있습니다

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

를 참조하면 ' 캐스트가 P (이 경우에는 PreferenceScreen)으로 넘어갑니다. 그래서 당신의 수업을 PreferenceScreen에 던지려고합니다. 그러나 당신이 말했듯이 그것은 Preference를 확장합니다.

수업을 PreferenceScreen으로 확장 할 수 있습니까? (이름만으로 판단하면 정말 시작해야합니다!).

+0

글쎄, 쉽지 않을 것이다. PreferenceScreen은 최종 단계이므로 약간 변경해야합니다. – adneal

+0

와우. 괜찮아. 구현이 실제로 무엇을합니까? – EboMike

+0

저장된 기본 설정을 가져 오거나 내보낼 때 사용하고 있습니다. 나는 처음에했던 것보다 훨씬 더 나아지고 있지 않다. 나는 환경 설정에 아이콘을 추가하는 다른 방법을 찾지 않을 수 있다고 생각합니다. – adneal

관련 문제