2014-05-11 1 views
0

ListPreference에서이 작업을 수행 할 수 있습니까? (대상 API 19)entry 및 entryValues에 대해 ListPreference에서 문자열과 정수 배열을 혼합 할 수 있습니까?

<string-array name="alert_type"> 
    <item>regular intervals</item> 
    <item>one time</item> 
</string-array> 
<integer-array name="alert_type_value"> 
    <item>0</item> 
    <item>1</item> 
</integer-array> 

이 오류가 발생합니다. 정수 배열을 문자열 배열로 변경하면 이 아니라이 오류를 발생시킵니다.

05-10 20:54:52.179: W/dalvikvm(32634): threadid=1: thread exiting with uncaught exception (group=0x40bef1f8) 
05-10 20:54:52.209: E/AndroidRuntime(32634): FATAL EXCEPTION: main 
05-10 20:54:52.209: E/AndroidRuntime(32634): java.lang.NullPointerException 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.preference.ListPreference.findIndexOfValue(ListPreference.java:215) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.preference.ListPreference.getValueIndex(ListPreference.java:224) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.preference.ListPreference.getEntry(ListPreference.java:202) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.preference.ListPreference.getSummary(ListPreference.java:148) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.preference.Preference.onBindView(Preference.java:507) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.preference.Preference.getView(Preference.java:453) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:222) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.AbsListView.obtainView(AbsListView.java:2222) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.ListView.makeAndAddView(ListView.java:1774) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.ListView.fillDown(ListView.java:672) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.ListView.fillFromTop(ListView.java:732) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.ListView.layoutChildren(ListView.java:1611) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.AbsListView.onLayout(AbsListView.java:2052) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.View.layout(View.java:11484) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.ViewGroup.layout(ViewGroup.java:4229) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1644) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1502) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.LinearLayout.onLayout(LinearLayout.java:1415) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.View.layout(View.java:11484) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.ViewGroup.layout(ViewGroup.java:4229) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.View.layout(View.java:11484) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.ViewGroup.layout(ViewGroup.java:4229) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1644) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1502) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.LinearLayout.onLayout(LinearLayout.java:1415) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.View.layout(View.java:11484) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.ViewGroup.layout(ViewGroup.java:4229) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.View.layout(View.java:11484) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.ViewGroup.layout(ViewGroup.java:4229) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1671) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.os.Looper.loop(Looper.java:137) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at android.app.ActivityThread.main(ActivityThread.java:4511) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at java.lang.reflect.Method.invokeNative(Native Method) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at java.lang.reflect.Method.invoke(Method.java:511) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743) 
05-10 20:54:52.209: E/AndroidRuntime(32634): at dalvik.system.NativeStart.main(Native Method) 

답변

2

불행히도 보통 ListPreference으로는이 작업을 수행 할 수 없습니다. 그러나 this blog post은 정수 배열을 허용하는 사용자 지정 목록 환경 설정을 만드는 방법을 보여 주며 마지막에는 전체 소스 코드도 있습니다.

+0

감사를 int로; 코스 티아는 최고의 프로그래머이지만 제 생각에는 쉬운 솔루션입니다 – likejiujitsu

+0

당신의 솔루션은 무엇입니까? – Karakuri

+0

해결책으로 여겨 질 수 있는지 알고 싶지 않습니다. 나는 그것을 아래에 열거한다. – likejiujitsu

0

가장 간단한 방법은 문자열에서 정수로 변환하고 다시 청취자에게 전달하는 것이 었습니다. 문자열에서

intValue = Integer.parseInt(sharedPreferences.getString(ALERT_TYPE,"-1")); 
alertTypePreference.setSummary(intValue == -1 ? "click to set" : (intValue == AlertTable.PERIODIC_TYPE ? "regular intervals" : "one time")); 

다시 링크에 대한

alertTypePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
    @Override 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     if (newValue.equals(Integer.toString(AlertTable.PERIODIC_TYPE))) { 
      setEnabledAlertType(AlertTable.PERIODIC_TYPE); 
     } else ..... 
     return true; 
    } 
});