2013-01-08 3 views
2

와 업데이트 ListPreference 여기 내 preferences.xml로안드로이드 : OnPreferenceChangeListener

<?xml version="1.0" encoding="utf-8"?> 

<ListPreference 
    android:key="KEY_1" 
    android:title="Title" 
    android:summary="Summary" 
    android:dialogTitle="Dialog" 
    /> 
<ListPreference 
    android:key="KEY_2" 
    /> 
<ListPreference 
    android:key="KEY_3" 
    /> 
<ListPreference 
    android:key="KEY_4" 
    /> 

입니다 그리고 여기 Settings.java입니다 :

public class Settings extends PreferenceActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 

// some methods to generate entries and values for ListPreference 
final List List_1 = // something 
final List List_2 = // something 
final List List_3 = // something 

String[] entry_1 = List_1.toArray(new String[List_1.size()]); 
String[] entry_2 = List_2.toArray(new String[List_2.size()]); 
String[] entry_3 = List_3.toArray(new String[List_3.size()]); 

String[] value_1 = List_1.toArray(new String[List_1.size()]); 
String[] value_2 = List_2.toArray(new String[List_2.size()]); 
String[] value_3 = List_3.toArray(new String[List_3.size()]); 


    // set arrays for entries and values  
final ListPreference lp1 = (ListPreference)findPreference("KEY_1"); 
lp1.setEntries(entry_1); 
lp1.setEntryValues(value_2); 

ListPreference lp2 = (ListPreference)findPreference("KEY_2"); 
lp2.setEntries(entry_2); 
lp2.setEntryValues(value_1); 

ListPreference lp3 = (ListPreference)findPreference("KEY_3"); 
lp3.setEntries(entry_2); 
lp3.setEntryValues(value_2); 

ListPreference lp4 = (ListPreference)findPreference("KEY_4"); 
lp4.setEntries(entry_2); 
lp4.setEntryValues(value_3); 

// update lp2, lp3, lp4 

     lp1.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       String listValue = (String) newValue; 

       ListPreference lp2 = (ListPreference)findPreference("KEY_2"); 
       lp2.setDefaultValue(listValue); 

       ListPreference lp3 = (ListPreference)findPreference("KEY_3"); 
       lp3.setDefaultValue(listValue); 

       ListPreference lp4 = (ListPreference)findPreference("KEY_4"); 
       lp4.setDefaultValue(listValue); 

       return true; 
      } 
     }); 
    } 
} 

이 잘 작동 단 한 시간 만 나를 위해 이자형. 내가 lp2, lp3 및 lp4에 대한 업데이트를 만들기 위해 여기에서 놓친 것은 무엇입니까? 나는 setDefaultValue가 공유 환경 설정에 대한 일회성 입력을 만듭니 까?

public class Settings extends PreferenceActivity { 

    private OnPreferenceChangeListener mListener=new OnPreferenceChangeListener(){ 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue){ 
      // as before 
     } 
    }; 
    // etc - I guess the line below is in onCreate() - correct your formatting ! 
    lp1.setOnPreferenceChangeListener(mListener); 
    } 
} 
: 당신이 디버그 인쇄가 클래스 필드에 수신기를 이동하지 참조하면 리스너가

lp1.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
    @Override 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     Log.d("Listener", "I listen"); 
     String listValue = (String) newValue; 
     // rest is the same 
    } 
}); 

이라고합니다 있는지 확인하기 위해 몇 가지 디버그 인쇄를 추가 -

+0

문제를 해결 했습니까? –

답변

0

나는 익명의 리스너가 쓰레기 수집 의심