2013-07-23 3 views
0

Я работаю над своими настройками, как вы можете видеть из моего xml и класса. my onPreferenceChange не устанавливает 2-ю и 3-ю кнопки переключения в значение false, когда первая первая кнопка переключения установлена ​​в значение false.PreferenceActivity Screen

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

Ok.

Определить 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

Смежные вопросы