アプリケーションの設定情報を含むデータベースをロードする独自のカスタムコンテンツプロバイダーがあります。
設定アクティビティの作成時にContentProviderから設定をロードします。
[設定]アクティビティは、PreferenceScreenとダイアログベースのEditTextで構成されています。
次のコードは、設定画面の使用方法とテキストの編集方法を示しています。
したがって、最初の画像からわかるように、これは機能し、メニューの下に情報が表示されます。
問題は画像2にあります。メニューの選択肢をクリックするとダイアログがポップアップしますが、空です。コンテンツプロバイダーからダイアログの編集テキストにデータをロードできるようにしたいので、画像では1つはユーザー名として「Donal」を示しているため、画像2ではダイアログの編集テキストにも「Donal」が表示されます。
また、ユーザーが設定を変更したときにコンテンツプロバイダーのデータを更新できるように、ダイアログの[OK]ボタンをリッスンできるようにしたいと思います。
誰かが私がやろうとしていることを手伝ってくれますか?
コード
public class PreferencesApp extends PreferenceActivity {
String name;
EditTextListener etl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadSettingsFromProvider();
etl = new EditTextListener(this);
setPreferenceScreen(createPreferenceHierarchy());
}
private PreferenceScreen createPreferenceHierarchy() {
// Root
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
// Dialog based preferences
PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this);
dialogBasedPrefCat.setTitle(R.string.dialog_based_preferences);
root.addPreference(dialogBasedPrefCat);
// Edit text preference
EditTextPreference editTextPref = new EditTextPreference(this);
editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
editTextPref.setKey("edittext_preference");
editTextPref.setTitle(R.string.title_edittext_preference);
editTextPref.setSummary(name);
dialogBasedPrefCat.addPreference(editTextPref);
return root;
}
public class EditTextListener extends EditTextPreference{
public EditTextListener(Context context){
super(context);
}
@Override
//When the dialog is closed, perform the relevant actions
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String text=getEditText().getText().toString();
Log.d("DIALOG CLOSED", "OK");
}
else {
// cancel hit
Log.d("DIALOG CLOSED", "CANCEL");
}
}
}