2013-06-12 4 views
6

을 구현하는 PreferenceFragment의 하위 클래스를 만들었습니다. Switch (서브 클래스는 CompoundButton)을 포함하는 환경 설정이 하나 있습니다. 다음과 같이 OnCreate버튼 청취자가 환경 설정 부분에서 작동하지 않습니다.

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    mAppController.doSomething(isChecked); 
    Log.v("rose_tag", "hi"); 
} 

내가 선호를 선언 : 여기에 내가 스위치의 값이 변경 될 때 생성 한 콜백의

Switch mySwitch = (Switch) myView.findViewById(R.id.switch); 
mySwitch.setEnabled(true); 
mySwitch.setOnCheckedChangeListener(this); 

콜백은보기가 처음 열릴 때 호출되는 (A 콜백의 중단 점에 도달했습니다.)하지만 로그가 인쇄되지 않으며 스위치를 켜고 끌 때 콜백이 다시 호출되지 않습니다. 어떻게이 콜백 작업을 할 수 있습니까?

또한 인라인 익명 수신기를 만들려고했습니다. 나는 또한 onClick 청취자와 함께 간단한 Button을 사용해 보았는데, 역시 작동하지 않았다.

+0

은 당신이 당신의 수입을 확인했다 : 당신의 PreferenceFragment/PreferenceActivity를의에서 onCreate 함수에서 다음

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="screen"> <SwitchPreference android:key="switch_preference" android:title="title" android:summary="summary" /> </PreferenceScreen> 

이 추가

을? 때로는 잘못된 가져 오기 선언이 발생합니다. onCheckedChangeListener를 다음과 같이 가져옵니다 : android.widget.CompoundButton.OnCheckedChangeListener? – Opiatefuchs

+0

'import android.widget.CompoundButton' –

+0

대체 방법은 mySwitch.setOnCheckedChangeListener (new OnCheckedChangeListener() {});입니다. 구현 된 chekedChangeListener를 설정하는 대신. 이것을 시도해도 될까요? – Opiatefuchs

답변

8

다른 일반 조각으로 PreferenceFragment을 사용하려고합니다. 그러나 올바른 메커니즘을 계산해야합니다. 예를 들어 사용자의 기본 설정보기를 만들기 위해 모든 위젯을 사용할 수 없다면 Preference 개체를 사용해야합니다 (환경 설정 하위 클래스 참조).

또 다른 예는 addPreferencesFromResource(int)을 사용하여 XML 리소스에서 환경 설정을 확장해야한다는 것입니다.

위의 두 링크와이 example을 확인하십시오.

도움이 되었기를 바랍니다.

2

Jorge Gil의 anwser를 사용하는 경우 PreferenceScreen에서 신고하는보기에 대한 참조를 쉽게 얻을 수 없습니다. 그러나이 경우 SwitchPreference 인 환경 설정 객체 중 하나를 쉽게 얻을 수 있습니다. 그래서 당신의 입술에/XML/preferences.xml로 스위치 환경 설정 추가 :

addPreferencesFromResource(R.xml.preferences);  
    SwitchPreference switchPref = (SwitchPreference) findPreference("switch_preference"); 

    switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      Log.e(getClass().getSimpleName(),"onPreferenceChange:" + newValue); 
      return true; 
     } 
    }); 
관련 문제