从xml首选项布局中拉出首选项

时间:2010-11-07 18:53:33

标签: preferences save android-preferences sharedpreferences user-preferences

好吧所以我一直在研究这个问题已经有一段时间了,我知道这比我制作它更容易但是我想要做的是我有我的xml偏好布局或者你想要的任何东西,在那个布局上我有几个复选框列表视图项和编辑文本,我需要做的是从xml布局获取这些首选项,然后我需要存储它们并在另一个活动中读取它们。我已经与这些工作了一点但是我总是有一个存储字符串的活动,然后我在活动中扩展了我需要的首选项。我知道在互联网上有数百个这样的教程,但我只是不明白如何实现它们。到目前为止,这是我的代码。

  public class MyPreference extends PreferenceActivity 
{
 @Override
 protected void onCreate(Bundle savedInstanceState) 
 {
  SharedPreferences sharedPreference = getSharedPreferences("PREFERENCES", Activity.MODE_PRIVATE);

  requestWindowFeature(Window.FEATURE_NO_TITLE);
  super.onCreate(savedInstanceState);  
  addPreferencesFromResource(R.layout.random_pref);

  // Get the custom preference
  final Preference randomPref = (Preference) findPreference("randomPref");
  Preference randomDayPref = (Preference) findPreference("randomDayPref");
  Preference hourPref = (Preference) findPreference("hourPref");
  Preference maxRandomMessagePref = (Preference) findPreference("maxRandomMessagePref");
  Preference randomContactsPref = (Preference) findPreference("randomContactsPref");
  Preference sendSMSPref = (Preference) findPreference("sendSMSPref");
  Preference sendEmailPref = (Preference) findPreference("sendEmailPref");

  //Finished
  randomPref.setOnPreferenceClickListener(new OnPreferenceClickListener() 
  {
   public boolean onPreferenceClick(Preference preference) 
   {
    return true;
   }
  });

  //Finished
  randomDayPref.setOnPreferenceClickListener(new OnPreferenceClickListener() 
  {
   public boolean onPreferenceClick(Preference preference) 
   {
    return true;
   }
  });


  hourPref.setOnPreferenceClickListener(new OnPreferenceClickListener() 
  {
   public boolean onPreferenceClick(Preference preference) 
   {
    return true;
   }
  });


  maxRandomMessagePref.setOnPreferenceClickListener(new OnPreferenceClickListener() 
  {
   public boolean onPreferenceClick(Preference preference) 
   {
    return true;
   }
  });


  randomContactsPref.setOnPreferenceClickListener(new OnPreferenceClickListener() 
  {
   public boolean onPreferenceClick(Preference preference) 
   {
    return true;
   }
  });


  sendSMSPref.setOnPreferenceClickListener(new OnPreferenceClickListener() 
  {
   public boolean onPreferenceClick(Preference preference) 
   {
    return true;
   }
  });

  sendEmailPref.setOnPreferenceClickListener(new OnPreferenceClickListener() 
  {
   public boolean onPreferenceClick(Preference preference) 
   {
    return true;
   }
  });
 }
}

继承我的XML文件

    <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
        <PreferenceCategory
                android:title="Randomization Properties">
                <CheckBoxPreference
                 android:title="Random Delays"
                 android:summary="Message"
                 android:defaultValue="false"
                 android:key="randomPref" /> 
                <CheckBoxPreference
                 android:title="Throughout The Day"
                 android:summary="Message"
                 android:defaultValue="false"
                 android:key="randomDayPref" />
             <ListPreference
                    android:title="Random Hourly Timings"
                    android:summary="Message"
                    android:key="hourPref"
                    android:defaultValue="6"
                    android:entries="@array/hours"
                    android:entryValues="@array/listValues"/> 
                <EditTextPreference
                 android:name="Messages"
                 android:summary="Message"
                 android:defaultValue="100"
                 android:title="Messages"
                 android:key="maxRandomMessagePref" />
        </PreferenceCategory>

        <PreferenceCategory
                android:title="Contacts">       
                <Preference
                 android:title="@string/contacts"
                 android:summary="Message"
                 android:key="randomContactsPref" /> 
        </PreferenceCategory>

        <PreferenceCategory
                android:title="Options">         
                <CheckBoxPreference
                 android:title="Send Through SMS"
                 android:summary="Send Messages As Normal"
                 android:defaultValue="false"
                 android:key="sendSMSPref" /> 
                <CheckBoxPreference
                 android:title="Send Trhrough E-Mail"
                 android:summary="Send Messages Through E-Mail Uses E-Mail Settings"
                 android:defaultValue="false"
                 android:key="sendEmailPref" />          
        </PreferenceCategory>
</PreferenceScreen>

从我在网上看到我可能需要创建一个onPrefernceChangeListener()?我真的很茫然我知道它必须简单我只是不明白当用户更改它们时如何从xml中拉出首选项然后保存它们以便我的man活动可以读取它们并相应地进行调整。如果知道自己在做什么的人可能会指出我的方向很好。

1 个答案:

答案 0 :(得分:0)

我不确定你在这里要求什么,但我会尝试回答。

如果您没有做任何花哨的事情,如果您使用默认共享首选项,则无需覆盖任何首选项的setOnPreferenceClickListener。基类将为您保存它。

要从其他活动访问这些偏好设置,您将执行以下操作:

SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
boolean savedValue = defaultSharedPreferences.getBoolean("randomPref", false);