如何设置从SharedPreferences动态加载它的PreferenceActivity(R.xml.preferences)的值?

时间:2012-04-10 11:58:37

标签: android sharedpreferences preferenceactivity

我有一个扩展PreferenceActivity的MyPreferenceActivity,如下所示:

public class MyPreferenceActivity extends PreferenceActivity{


  @Override
  public void onCreate(Bundle savedInstanceState) {     
    super.onCreate(savedInstanceState);        
    addPreferencesFromResource(R.xml.preferences);  
  }

}

我也有自定义共享首选项,R.xml.preferences被各个首选项类绑定...例如。

preferences.xml有

            <!--EditTextPreference-->
            <com.myapp.preferences.PrimaryNumberPreference
                android:key="PREFS_PRIMARY_NUMBER"
                android:title="@string/primary_number_preference_title" 
                android:summary="@string/primary_number_preference_summary"
                android:dialogTitle="@string/primary_number_preference_dialog_title" 
                    android:dialogMessage="@string/primary_number_preference_dialog_message"  
            />

PrimaryNumberPreference.java:

public class PrimaryNumberPreference extends EditTextPreference {

Context ctx = null;

public PrimaryNumberPreference(Context context) {
    super(context);
    this.ctx = context;
}

public PrimaryNumberPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.ctx = context;
}

public PrimaryNumberPreference(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.ctx = context;

}

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    if (positiveResult){    
        customPreferenceibrary.setPrefsPrimaryNumber(getText());
    }
}

}

好的,所有似乎都到位了。现在我想要的是每次加载PreferenceActivity时,它应该获取存储在各自键中的当前共享偏好值并预填充PreferenceActivity的元素...

例如:安装我的应用程序时,PrimaryNumber共享首选项设置为1234。现在,如果我转到MyPreferenceActivity并浏览PrimaryNumber EditTextPreference,则文本框应预先填充1234。

Something(伪代码),如:

MyPreferenceActivity.PrimaryNumberPreference.Val = getSharedPreferences(prefsPrimaryNumber)

我该怎么做?

修改

如果问题不清楚并需要更好的解释,请告诉我。我确信答案是在android中非常标准的简单实现。所有PreferenceActivity元素仅从存储的SharedPreferences中选择要显示的当前值,对吗?

2 个答案:

答案 0 :(得分:2)

我想我发现了两个潜在的问题:

问题一

如果您有自定义首选项,例如PrimaryNumberPreference.java,则需要在对话框关闭时手动保存首选项。这是你在 customPreferenceibrary.setPrefsPrimaryNumber(getText());

如果他们没有参与此功能,那么我认为他们需要。 (或者在onDialogClosed中的其他地方提交)

问题二

假设您在setPrefsPrimaryNumber中提交了首选项 ,我认为setPrefsPrimaryNumber需要接收两个参数,

  1. 首选项名称
  2. 实际值
  3. 我认为仅仅在XML中设置密钥名称就足够了(android:key =“PREFS_PRIMARY_NUMBER是不够的)

    希望这有帮助。

答案 1 :(得分:0)

我在@Mel提供的建议的帮助下找到答案,非常容易。

在扩展相应的PreferenceActivity元素的类中(例如,如下所示),只需在该首选元素类的构造函数中添加this.setValue。多数民众赞成!

public class selectColorPreference extends ListPreference{

    Context ctx = null;
    private String error = null;
    private int prefsRemoteSMSAccess;
    MyPreferencesLibrary myPreferencesLibrary;

    public selectColorPreference(Context context) {
        super(context);
        this.ctx = context;

        myPreferencesLibrary = new MyPreferencesLibrary(ctx);
        this.setValue(myPreferencesLibrary.getSharedPreferenceValueForColor());

    }
}