0

我有一个像这样扩展 PreferenceActivity 的 MyPreferenceActivity:

public class MyPreferenceActivity extends PreferenceActivity{


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

}

我也有 R.xml.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 时,它应该获取存储在各自键中的当前 sharedpreference 值并预填充 PreferenceActivity 的元素......

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

像这样的东西(伪代码):

MyPreferenceActivity.PrimaryNumberPreference.Val = getSharedPreferences(prefsPrimaryNumber)

我怎样才能做到这一点?

编辑

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

4

2 回答 2

2

我想我看到了两个潜在的问题:

问题一

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

如果他们没有在这个功能中提交,那么我认为他们需要这样做。(或在 onDialogClosed 的其他地方提交)

问题二

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

  1. 首选项名称
  2. 实际值

我认为仅在 XML 中设置键名是不够的(android:key="PREFS_PRIMARY_NUMBER 是不够的)

希望这可以帮助。

于 2012-04-11T12:34:02.297 回答
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());

    }
}
于 2012-04-12T08:11:11.273 回答