Android -ContentSproviderに出入りする設定を表示および保存するために設定スクリーンを使用する
-
22-09-2019 - |
質問
アプリケーションの設定情報を含むデータベースをロードする独自のカスタムコンテンツプロバイダーがあります。
設定アクティビティの作成に関して、ContentSproviderから設定をロードします。
私の設定アクティビティは、設定スクリーンとダイアログベースのEdittextで構成されています。
次のコードは、設定画面を使用してテキストを編集する方法を示しています。
したがって、最初の画像からわかるように、これは機能し、その下に情報が付いたメニューが表示されます。
問題は画像2にあります。メニューの選択肢をクリックすると、ダイアログがポップアップ表示されますが、空が空です。コンテンツプロバイダーのデータをダイアログの編集テキストにロードできるようにしたいので、画像で1つはユーザー名として「ドナル」を表示しているため、画像2に「ドナル」もダイアログの編集テキストに表示されます。
また、ダイアログの[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");
}
}
}
解決
で利用可能な方法を検索します ドキュメンテーション.
購読できます onDialogClosed
OKを取得するか、クリックイベントをキャンセルします。
また、調べてください getEditText
ダイアログの編集を返す方法で、そこに値を設定できます。または調べてください setText
, 、あなたは多分それで価値を設定することができます。これは後で私によってテストされていません。
編集1
申し訳ありませんが、購読することはできません。サブクラス化する必要があります EditTextPreference
メソッドをオーバーライドします。複雑な例です ここ しかし、あなたはあなたがこれに興味を持っているすべてのものを必要としません:
@Override
//When the dialog is closed, perform the relevant actions
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String text=getEditText().getText().toString();
}
else {
// cancel hit
}
}
編集2
あなたはドロップする必要があります
etl = new EditTextListener(this);
新しいクラスを実装する必要があります
EditTextPreference editTextPref = new EditTextListener(this);
したがって、コードはなります
// Edit text preference
EditTextPreference editTextPref = new EditTextListener(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);