2013-05-08 16 views
0

我来认为我的问题是与我的偏好没有正确完成是为什么我无法访问模板。下面是我的喜好:Android Prefererences

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

    <PreferenceCategory 
     android:title="@string/pref_user_profile" 
     android:textSize="20px" 
     android:layout="@layout/pref_layout"> 

     <SwitchPreference 
       android:title="@+string/pref_frequency" 
       android:summary="@+string/pref_frequency_summary" 
       android:key="frequency" 
       android:defaultValue="true" 
      android:layout="@layout/pref_layout"/> 

     <SwitchPreference 
       android:title="@+string/pref_time" 
       android:summary="@+string/pref_time_summary" 
       android:key="time" 
       android:defaultValue="true" 
      android:layout="@layout/pref_layout"/> 

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

的Java:

package com.projectcaruso.naturalfamilyplaning; 

import com.projectcaruso.naturalfamilyplanning.R; 
import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class UserSettingActivity extends PreferenceActivity { 

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

     addPreferencesFromResource(R.xml.settings); 

    } 
} 

这里是我的电话设置菜单:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     final int RESULT_SETTINGS = 1; 

     switch (item.getItemId()) { 
     case R.id.projectcaruso: 
      Util.goToGitHub(this); 
      return true; 
     case R.id.about: 
      new AlertDialog.Builder(this) 
      .setTitle(R.string.about) 
      .setMessage(Html.fromHtml(getString(R.string.about_msg))) 
      .show(); 
      break; 
     case R.id.licenses: 
      new AlertDialog.Builder(this) 
      .setTitle(R.string.licenses) 
      .setMessage(Html.fromHtml(getString(R.string.license_detail))) 
      .show(); 
      break; 
     case R.id.contact: 
      break; 
     case R.id.settings: 
      Intent j = new Intent(this, UserSettingActivity.class); 
      startActivityForResult(j, RESULT_SETTINGS); 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.settings, menu); 
     return true; 
    } 

} 

因此,任何帮助,将不胜感激!我试图访问这些偏好,但不能。它似乎在拯救他们就好了。我能够测试并运行代码,更改pref并保存它们的状态。但是,当我尝试访问他们,我不能...这是我用来尝试和访问他们的代码:

编辑: 我已经改变它调用如下,无论设置它仍然是“你好吐司2!“ @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); SharedPreferences preferences = this.getActivity()。getSharedPreferences(“UserSettingActivity”,0); //充气布局对该片段

  Boolean symptothermal = preferences.getBoolean("symptothermal", true); 

      if (!symptothermal) { 
       Context context = getActivity().getApplicationContext(); 
       Toast.makeText(context, "Hello toast 1!", Toast.LENGTH_LONG).show(); 
      } else { 
       Context context = getActivity().getApplicationContext(); 
       Toast.makeText(context, "Hello toast 2!", Toast.LENGTH_LONG).show(); 
      } 

      if (!symptothermal) { 
       TextView temp = (TextView) getView().findViewById(R.id.temp); 
       temp.setVisibility(View.GONE); 
      } 
     } 

回答

3

问题是你如何试图访问它们。

可以使用此行:

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0); 

当访问通过一个PreferenceActivity你应该调用默认的首选项存储偏好。

SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

就是这样。

编辑

如果您正在从一个片段getDefaultSharedPreferences()一个电话,你只需要改变你传递作为参数的值。 this在上面的例子是一个方面,从片段调用该方法,请执行下列操作:

SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
+0

片段内的getDefaultSharedPreferences错误...有什么替代方法? – jcaruso 2013-05-08 13:33:33

+0

它没有错误,你只需要通过getActivity()而不是'this' – 2013-05-08 13:34:20

+0

你是男人!显然它工作! – jcaruso 2013-05-08 13:36:43

0

也许你想从不同的文件中读取首选项。 添加getPreferenceManager().setSharedPreferencesName("pref");UserSettingActivity,看看它是否会有所帮助

+0

让我扔面包到它来测试它...挂在 – jcaruso 2013-05-08 13:30:17

+0

见我的编辑发布上述 – jcaruso 2013-05-08 13:33:53

+0

感谢你的帮助,虽然上面的帖子修复了你的帮助是无价的! – jcaruso 2013-05-08 13:37:35