2011-07-15 179 views
0

在我的應用程序中,我試圖設置偏好設置,允許您從ListPreference中的大量選項更改佈局的背景圖像。 我的喜好的xml:Android偏好設置錯誤

<PreferenceCategory android:title="Favorite Team"> 
    <ListPreference 
     android:title="Favorite Team" 
     android:summary="@string/prefs_pick_fav_team" 
     android:key="keyFavTeam" 
     android:entries="@array/teams" 
     android:entryValues="@array/teams_values" 
     android:defaultValue="0" 
     /> 
</PreferenceCategory> 

的PreferencesActivity,這也是在清單:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    addPreferencesFromResource(R.xml.prefs); 
} 

然後這是我的屏幕的onCreate代碼我想要的背景變化:

SharedPreferences SP = PreferenceManager 
    .getDefaultSharedPreferences(getBaseContext()); 

    String strFavTeam = SP.getString("keyFavTeam", "0"); 

    LinearLayout linearLayout = (LinearLayout) this.findViewById(R.id.main_screen); 

    if(strFavTeam.equals("0")){ 
     linearLayout.setBackgroundResource(R.drawable.first_screen); 
    } 
    if(strFavTeam.equals("73")){ 
     linearLayout.setBackgroundResource(R.drawable.tennessee_screen); 
    } 
    if(strFavTeam.equals("67")){ 
     linearLayout.setBackgroundResource(R.drawable.georgia_screen); 
    } 

我的問題是,當我從ListPreference中選擇田納西州(其值爲73)時,我得到了一個關閉的力量。

這是從logcat的堆棧跟蹤:

07-14 23:43:35.535: ERROR/AndroidRuntime(5581): FATAL EXCEPTION: main 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581): java.lang.ArrayIndexOutOfBoundsException 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at android.preference.ListPreference.onDialogClosed(ListPreference.java:218) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at android.preference.DialogPreference.onDismiss(DialogPreference.java:383) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1047) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at android.os.Looper.loop(Looper.java:130) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
07-14 23:43:35.535: ERROR/AndroidRuntime(5581):  at dalvik.system.NativeStart.main(Native Method) 

誰能告訴我什麼,我需要做的,以防止這一點,並更改背景感動嗎?

感謝

+0

'@ array/teams'和'@ array/teams_values'的值是什麼? – Femi

回答

1

你的問題是,你正在使用的索引大於數組的大小。從發生故障的Android的源實際行是這樣的:

String value = mEntryValues[mClickedDialogEntryIndex].toString(); 

所以你可能在@array/teams@array/teams_values的長度不匹配,或者你在那裏有一個完全不正確的值。

+0

那麼,有73項的球隊和teams_values但樣品將是: <字符串數組名=「隊」> 田納西 <字符串數組名=」 teams_values「> 你是說每個的長度都一樣嗎? – ericcarboni

+1

是的:他們必須是相同的大小和索引必須工作。 – Femi

+0

我還是有點困惑,對不起。你指的是什麼意思? – ericcarboni