2013-06-12 15 views
6

PreferenceFragmentというサブクラスを作成しました。これはCompoundButton.OnCheckedChangeListenerです。私はSwitch(サブクラスはCompoundButton)を含む1つの設定を持っています。次のようにOnCreateボタンリスナーがPreferenceフラグメントで機能しない

@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

あなたはあなたの輸入をチェックしていますか?時には間違った輸入宣言があることがあります。 onCheckedChangeListenerは次のようにインポートされていますか? – Opiatefuchs

+0

私は 'import android.widget.CompoundButton'を持っています –

+0

多分別の方法です:mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener(){});実装されたchekedChangeListenerを設定する代わりに使用します。これを試すことができますか? – Opiatefuchs

答えて

8

他の通常のフラグメントと同じようにPreferenceFragmentを使用しようとしています。しかし、適切なメカニズムをカウントする必要があります.1つの例では、ユーザの環境設定ビューを作成するためにすべてのウィジェットを使用することはできません。Preferenceオブジェクトを使用する必要があります(環境設定サブクラスを参照)。

もう1つの例は、addPreferencesFromResource(int)を使用して、XMLリソースから環境設定を拡張することです。

上記の両方のリンクとこれを確認してください。example

私はあなたを助けてくれることを願っています。

2

Jorge Gilのanwserを使用すると、PreferenceScreenで宣言しているビューへの参照を簡単に取得できなくなります。 しかし、あなたはそのような場合にSwitchPreferenceであるpreferenceオブジェクトの1つを簡単に得ることができます。だからあなたのres/xmlの/にあるpreferences.xmlあなたのスイッチ設定を追加します。

<?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> 

その後であなたのPreferenceFragment/PreferenceActivityののonCreate機能は、これを追加します。

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; 
     } 
    }); 
関連する問題