0

次のように 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());
    }
}

}

OK、すべてが整っているようです。今私が欲しいのは、PreferenceActivity がロードされるたびに、それぞれのキーに格納されている現在の sharedpreference 値をフェッチし、PreferenceActivity の要素を事前設定する必要があることです...

例: アプリをインストールすると、PrimaryNumber 共有設定が 1234 に設定されます。ここで、MyPreferenceActivity に移動して PrimaryNumber EditTextPreference を参照すると、テキスト ボックスは 1234 で事前入力されているはずです。

のようなもの(疑似コード):

MyPreferenceActivity.PrimaryNumberPreference.Val = getSharedPreferences(prefsPrimaryNumber)

どうやってやるの?

編集

質問が不明確で、より良い説明が必要な場合はお知らせください。答えは、アンドロイドで非常に標準的なものの単純な実装であると確信しています。すべての PreferenceActivity 要素は、保存されている SharedPreferences のみから表示される現在の値を選択しますよね?

4

2 に答える 2

2

2 つの潜在的な問題があると思います。

問題1

PrimaryNumberPreference.java などのカスタム設定がある場合は、ダイアログを閉じたときに設定を手動で保存する必要があります。それはcustomPreferenceibrary.setPrefsPrimaryNumber(getText());で行っていることですか? ??

彼らがこの機能にコミットしていない場合は、そうする必要があると思います。(または onDialogClosed の別の場所でコミット)

問題 2

setPrefsPrimaryNumber で設定をコミットしていると仮定すると、setPrefsPrimaryNumber は 2 つのパラメーターを受け取る必要があると思います。

  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 に答える