2013-07-23 127 views
0

我正在處理我的設置,因爲您可以從我的xml和類中看到。當第一個第一切換按鈕設置爲false時,我的onPreferenceChange不會將第二個和第三個切換按鈕設置爲false。偏好活動屏幕

logcat的

07-23 16:10:42.879: I/PROJECTCARUSO(11579): preference: Cervical Mucus Are you observing MucusnewValue: true 
07-23 16:10:42.879: I/PROJECTCARUSO(11579): True 
07-23 16:10:44.601: I/PROJECTCARUSO(11579): preference: Cervical Mucus Are you observing MucusnewValue: false 
07-23 16:10:44.611: I/PROJECTCARUSO(11579): True 

類別:

public class UserSettingActivity extends PreferenceActivity implements OnPreferenceChangeListener{ 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    /** 
    * Populate the activity with the top-level headers. 
    */ 
    @Override 
    public void onBuildHeaders(List<Header> target) { 
     Log.i("PROJECTCARUSO","onBuildHeaders"); 
     loadHeadersFromResource(R.xml.preference_headers, target); 

    } 

    /** 
    * This fragment shows the preferences for the first header. 
    */ 
    public static class Prefs1Fragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      // Load the preferences from an XML resource 
      addPreferencesFromResource(R.xml.notification_settings); 
     } 
    } 

    /** 
    * This fragment shows the preferences for the second header. 
    */ 
    public static class Prefs2Fragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      // Load the preferences from an XML resource 
      addPreferencesFromResource(R.xml.charting_settings); 

      findPreference("cervical_mucus").setOnPreferenceChangeListener(
        new OnPreferenceChangeListener() { 

          @Override 
          public boolean onPreferenceChange(Preference preference, Object newValue) { 
           Log.i("PROJECTCARUSO","preference: "+ preference + "newValue: " + newValue); 
           SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 

           // string test w/o "==" usage. 
           if ("false".equals(newValue)) { 
            prefs.edit().putBoolean("mucus_stamps", false).commit(); 
            prefs.edit().putBoolean("fertile_infertil", false).commit(); 
           } else { 
            prefs.edit().putBoolean("mucus_stamps", true).commit(); 
            prefs.edit().putBoolean("fertile_infertil", true).commit(); 
           } 

           // remove all and reload 
           getPreferenceScreen().removeAll(); 

           //NAMEOFXML is the same you have in your fragement's oncreate 
           addPreferencesFromResource(R.xml.preference_headers); 

           // true instead of false so the new value gets kept 
           return true; 
          }; 
        }); 
     } 
    } 

    protected void onPause() 
    { 
     super.onPause(); 
    } 

    protected void onResume() 
    { 
     super.onResume(); 
    } 

    protected void onStop() { 
     super.onStop(); 
     finish(); 
    } 

    @Override 
    public boolean onPreferenceChange(Preference arg0, Object arg1) { 
     // TODO Auto-generated method stub 
     return true; 
    } 


} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <PreferenceCategory 
     android:title="@string/pref_chart_profile" 
     android:textSize="20px"> 

     <SwitchPreference 
       android:title="@+string/pref_symptothermal" 
       android:summary="@+string/pref_symptothermal_summary" 
       android:key="symptothermal" 
       android:defaultValue="true" 
       android:layout="@layout/pref_layout"/> 

     <SwitchPreference 
       android:id="@+id/cervical_mucus" 
       android:title="@+string/pref_cervical_mucus" 
       android:summary="@+string/pref_cervical_mucus_summary" 
       android:key="cervical_mucus" 
       android:defaultValue="true" 
       android:layout="@layout/pref_layout" />  

     <SwitchPreference 
       android:id="@+id/mucus_stamps" 
       android:title="@+string/pref_mucus_stamps" 
       android:summary="@+string/pref_mucus_stamps_summary" 
       android:key="mucus_stamps" 
       android:defaultValue="true" 
       android:layout="@layout/pref_layout" /> 

     <SwitchPreference 
       android:id="@+id/fertile_infertil" 
       android:title="@+string/pref_fertile_infertile" 
       android:summary="@+string/pref_fertile_infertile_summary" 
       android:key="fertile_infertil" 
       android:defaultValue="true" 
       android:layout="@layout/pref_layout" /> 
    </PreferenceCategory> 

</PreferenceScreen> 

回答

1

確定。

定義SwitchPreferences右下方的類是這樣的:

SwitchPreference mucus_stamps; 
    SwitchPreference cervical_mucus; 

然後給所述開關的視圖: cervical_mucus =(SwitchPreference)findPreference( 「cervical_mucus」); mucus_stamps =(SwitchPreference)findPreference(「mucus_stamps」);

現在設置的onchange聽衆:

mucus_stamps.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, 
       Object newValue) { 
      // TODO Auto-generated method stub 

      mucus_stamps.setChecked(true); 
      cervical_mucus.setChecked(false); 
          //here you set the others to false. 


      return true; 
     } 

    }); 
+0

頻率甚至沒有定義 – jcaruso

+0

值設置得很好。它的觀點並不令人耳目一新以顯示新的價值。 – jcaruso

+0

好吧,如果你像我提到的那樣做,視圖將被更新。 [更多信息](http://stackoverflow.com/questions/17625830/only-select-one-checkbox-of-splash-preference-checkedboxs/17800690#17800690) – LordMarty

1
 findPreference("cervical_mucus").setOnPreferenceChangeListener(
      new OnPreferenceChangeListener() { 

        @Override 
        public boolean onPreferenceChange(Preference preference, Object newValue) { 
         Log.i("PROJECTCARUSO","preference: "+ preference + "newValue: " + newValue); 
         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 

         // string test w/o "==" usage. 
         if ("false".equals(newValue)) { 
          prefs.edit().putBoolean("mucus_stamps", false).commit(); 
          prefs.edit().putBoolean("fertile_infertil", false).commit(); 
         } else { 
          prefs.edit().putBoolean("mucus_stamps", true).commit(); 
          prefs.edit().putBoolean("fertile_infertil", true).commit(); 
         } 

         // remove all and reload 
         getPreferenceScreen().removeAll(); 
         //NAMEOFXML is the same you have in your fragement's oncreate 
         addPreferencesFromResource(R.xml.NAMEOFXML); 

         // true instead of false so the new value gets kept 
         return true; 
        }; 
      }); 
+0

答案不完全是這樣,但近看我的編輯。然而,它並沒有把這兩個切換設置爲假。 – jcaruso

+0

它似乎並不令人耳目一新。 – jcaruso