19

を使用してAPIFragmentを表示しようとしています。DialogDialogFragment

私のダイアログにはEditTextビューしかありません。それに書き込まれた文字列をFragment.

からダイアログを表示することはFragmentできますが、入力フィールドから文字列を取得してFragment.

ダイアログを作成する両方の方法を試しました。DialogFragment.onCreateViewメソッドを上書きしてダイアログ全体のビューを記述し、 を上書きしてDialogFragment.onCreateDialogを使用しAlertDialog.Builderて、ボタンの動作を記述しやすくしました。

ダイアログのホストにイベントを返すダイアログに関する Android のドキュメントでは、ホストは常に でありActivity、決して ではありませんFragment。私のケースで使用するために動作を一般化しようとしましたが、できません。

DialogFragment.onAttachコールバックを使用して参照を取得し、と のActivity間のインターフェイスを使用しようとしましたが、正常に動作しますが、からを取得して動作させることができません。FragmentDialogFramentFragmentActivity

誰でも簡単な例を手伝ってもらえますか?

前もって感謝します

4

2 に答える 2

45

setTargetFragmentのおよびgetTargetFragmentメソッドを使用できますFragmentFragmentを のターゲットとして設定DialogFragmentし、 内からそれへの参照を取得できますDialogFragment

于 2012-12-24T23:43:49.293 に答える
3

コールバックを使用できます。ダイアログフラグメントに「完了」ボタンなどを実装するだけです。

したがって、ダイアログフラグメントで次のようにします。

protected OnDialogClickedListener callback = null;

public interface OnDialogClickedListener {
    public abstract void onDialogClicked(int position);
}

public void setOnDialogClickedListener(OnDialogClickedListener l){
    callback = l;
}

button.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        callback.onDialogClicked(position);
        dismiss();
    }
});

あなたの活動では、次のようなことをしてください:

final YourFragment f = YourFragment .newInstance(0);
f.show(ft, "YourFragment ");
f.setOnDialogClickedListener(new OnDialogClickedListener() {
    @Override
    public void onDialogClicked(int position) {
        updateText(position);
        f.dismiss();
    }
});
于 2012-12-24T23:37:04.437 に答える