0

编辑:我尝试了这个新代码,但似乎它们仍然被重置。谁能告诉我,并为我的设置被重置提出解决方案?

public class UserSettingActivity extends PreferenceActivity implements OnPreferenceChangeListener{

    static SwitchPreference mucus_stamps;
    static SwitchPreference fertile_infertil;
    static SwitchPreference cervical_mucus;

    @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(
                    mucus_stamps = (SwitchPreference) findPreference("mucus_stamps");
                    fertile_infertil = (SwitchPreference) findPreference("fertile_infertil"); 
                    cervical_mucus = (SwitchPreference) findPreference("cervical_mucus"); 

                    cervical_mucus.setOnPreferenceChangeListener(
                              new OnPreferenceChangeListener() {

                                     @Override
                                     public boolean onPreferenceChange(Preference preference, Object newValue) {

                                         // string test w/o "==" usage.
                                         if (newValue.equals(false)) {
                                             Log.i("PROJECTCARUSO","false");
                                             mucus_stamps.setChecked(false);
                                             fertile_infertil.setChecked(false);

                                         } else {
                                             Log.i("PROJECTCARUSO","true");
                                             mucus_stamps.setChecked(true);
                                             fertile_infertil.setChecked(true);
                                         }

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


                      if(!cervical_mucus.isChecked()){
                             mucus_stamps.setSelectable(false);
                             mucus_stamps.setEnabled(false);

                             fertile_infertil.setSelectable(false);
                             fertile_infertil.setEnabled(false);
                         } else {
                             mucus_stamps.setSelectable(true);
                             mucus_stamps.setEnabled(true);

                             fertile_infertil.setSelectable(true);
                             fertile_infertil.setEnabled(true);
                         }
        }
    }

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

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


    @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>
4

1 回答 1

1

取决于你想要什么。

该值已保存(测试),但“可选择”不是首选项值。因此,您必须在启动首选项屏幕时进行设置。

执行此操作:在您的 oncreate 之前:

  SwitchPreference mucus_stamps;

然后在你的 findPreference("mucus_stamps")

  mucu_stamps = (SwitchPreference) findPreference("mucus_stamps");

现在,在 onclicklistener 之外,您可以设置它。

if(!mucus_stamps.isChecked()){
             mucus_stamps.setSelectable(false);
             mucus_stamps.setEnabled(false);
         }

(我添加了“setEnablet”以向您展示您也可以禁用它,而不仅仅是使其“不可选择”。可选择仅表示您不能单击“关闭/打开”区域之外的任何内容以将其更改为打开/离开。)

我个人更喜欢这样做:

    mucus_stamps = (SwitchPreference) findPreference("mucus_stamps");
    mucus_stamps.setOnPreferenceChangeListener(
              new OnPreferenceChangeListener() {

                     @Override
                     public boolean onPreferenceChange(Preference preference, Object newValue) {

                         //SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());




                         // string test w/o "==" usage.
                         if (newValue.equals(false)) {
                             mucus_stamps.setChecked(false);

                             mucus_stamps.setSelectable(false);
                         } else {
                             mucus_stamps.setChecked(true);
                         }

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


      if(!mucus_stamps.isChecked()){
             mucus_stamps.setSelectable(false);
             mucus_stamps.setEnabled(false);
         }

而且,当您按照您或我的方式进行操作时,您不需要实现 OnPreferenceChangeListener。并不是说它真的很重要。

:)

于 2013-07-24T13:46:50.300 回答