1

アプリケーションの設定情報を含むデータベースをロードする独自のカスタムコンテンツプロバイダーがあります。

設定アクティビティの作成時に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");
        }
    }       
}
4

1 に答える 1

1

Documentationで使用可能なメソッドを検索します。
にサブスクライブし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);
于 2010-03-24T11:56:53.567 に答える