2011-02-17 3 views
2

ListPreference의 항목에 개별 리스너를 추가하려고하는데 올바른 코드를 찾을 수 없습니다.개별 ListPreference 항목에 리스너 추가

예를 들어 영역이 필요한 앱이 있다고 가정합니다. 그래서 나는 ListPreference 세 가지 옵션이 있습니다; 미주, 아시아, 유럽.

트랙 패드를 사용하여 항목을 스크롤하면 포커스를 얻을 때 환경 설정의 텍스트를 말하고 싶습니다.

API의 어딘가에 있어도 개별 항목에 리스너를 추가 할 수 있지만 찾을 수는 없습니다. ListPreference (DialogPreference에서 상속)에 setOnPreferenceClickListener(..) 방법이 있지만 실제 상위 환경 설정 항목을 선택할 때 유용합니다.

특수 하위 클래스를 작성해야합니까?

에보고 한 후 편집

이 더 나는 더 내 질문을 명확히 할 필요가 있다고 생각합니다. 환경 설정을 사용하는 경우 PreferenceActivity에서 onPreferenceTreeClick (PreferenceScreen prefScreen, Preference pref) 메서드를 무시할 수 있습니다. 이렇게하면 환경 설정의 모든 클릭을 차단할 수 있습니다. 그러나 팝업 실제 대화 상자에 수신기를 추가하고 싶습니다. 위의 예제에서 "아메리카, 아시아, 유럽"옵션. 따라서 아시아를 선택하거나 클릭하면 차단할 수 있습니다.

제 질문은 이러한 개별 옵션에 리스너를 추가하는 방법입니다.

환호

답변

0

나는이 하나와 유사한 유래의 다른 포스트 있다고 생각 : Custom Row in a ListPreference가.

이 항목에서는 서브 클래 싱이 해결책입니다. 그러나 귀하의 경우에는 간단한 ListAdapter을 사용할 수 있습니다. 다른 방법을 호출 (case는 ID 또는 배열이나 이런 건에서 인덱스) 어댑터를 설정 한 경우

, 당신은 방법 onItemClick를 사용할 수 있으며이 방법 안에 당신은 switch 문을 사용할 수 있습니다.

귀하의 질문을 이해하시기 바랍니다. :)

아! onFocusChange Listener도 확인해야합니다. 이 Listener를 모든 Preference Item (보기 여야 함, 어댑터에 리스너 추가)에 추가 한 다음 Listener 메소드에 발표 된 switch 문을 추가 할 수 있습니다.

인사와 내가 당신에게 힌트를 제공 할 수있는 희망,

줄리안은

+1

감사 줄리안를 클릭 한 항목을 참조하십시오. 나는 지금 그것을보고있다.나는'PreferenceScreen','ListPreference','ListView','ListAdapter', 그리고 그것들이 모두 어떻게 어울리는 지 내 머리를 되 찾으려고합니다. 기본적으로 내 ListPreference의 ListView에 대한 참조를 가져와야합니다. 'findViewByID (R.id.my_button)'을 할 수있는 것처럼)'ListPreference'에 대한 참조를 얻을 수있는 방법이 있습니까? – Tim

2

OnSharedPreferenceChangeListener는 자신의 OnPreferenceChangeListener과 sharedPref 값이 변경 후 = 진정한 때 영구적이라고하지만, 각 항목에 대해 실제로 할당 할 수 있습니다 거기 당신은

ListPreference pLocAuto = (ListPreference) findPreference(PREF_LOC_AUTO); 
pUpdateAuto.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       System.out.print(newValue.toString()); 
       return false; 
      } 
     }); 
+0

도움이되었지만 변경 후에 저장하려면 TRUE를 반환해야합니다. – careful7j

8
final ListPreference list = (ListPreference) preference; 
list.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 

     int index = list.findIndexOfValue(newValue.toString()); 

     if (index != -1) { 
      Toast.makeText(getBaseContext(), list.getEntries()[index], Toast.LENGTH_LONG).show(); 
     } 
     return true; 
    } 
}); 
+0

이것은 항상 문제를 해결하지 못합니다. 사용자가 기본 항목을 클릭하면 변경 리스너에서이 항목이 호출되지 않습니다. – yongsunCN