我有一个扩展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中选择要显示的当前值,对吗?
答案 0 :(得分:2)
我想我发现了两个潜在的问题:
问题一
如果您有自定义首选项,例如PrimaryNumberPreference.java,则需要在对话框关闭时手动保存首选项。这是你在 customPreferenceibrary.setPrefsPrimaryNumber(getText()); ?
如果他们没有参与此功能,那么我认为他们需要。 (或者在onDialogClosed中的其他地方提交)
问题二
假设您在setPrefsPrimaryNumber中提交了首选项 ,我认为setPrefsPrimaryNumber需要接收两个参数,
我认为仅仅在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());
}
}