2011-07-15 161 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