4

3 つのフラグメントを持つアクティビティを取得し、これらのフラグメントの 1 つから MyDialogFragment.show() メソッドを呼び出しています。ダイアログが表示されます。テキスト入力を行い、このテキスト入力をフラグメントに戻そうとします。ここまでは順調ですね。

set/getTargetFragment() 呼び出しと組み合わせて、「親」フラグメントの onActivityResult() を介してバックコミュニケーションをセットアップしました (以下のコードを参照)。そして、親フラグメントでその結果を取得しますが、一部のデータを渡すことができません。インテントを作成して余分なデータを入れようとするたびに失敗します。私が盲目なのかどうかはわかりません..でも、onClick() メソッド内でインテントを作成できるはずではありませんか?!

どんな助けでも大歓迎です!

私のダイアログフラグメント内:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getParentFragment().getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    builder.setView(inflater.inflate(R.layout.dialog_choose_title, null));

    builder.setTitle(mTitle)
            .setPositiveButton(R.string.dialog_save_title, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent(getParentFragment().getActivity(), MyMainClass.class);
                    intent.putExtra("title", mEditText.getText().toString());
                    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
                    dismiss();
                }
            })
            .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dismiss();
                }
            });
    return builder.create();
}

私のフラグメント内:

public void onClick(View v) {
            ChooseTitleDialog dialog = ChooseTitleDialog.newInstance(mTimerObject.getmTitle());
            dialog.setTargetFragment(mThis, 42);
            dialog.show(mFragmentMgr, "choose_title_dialog");
        }
4

1 に答える 1

0

そして、私は少し盲目です!インテントを作成し、適切なコンテキスト (getActivity()、getParentFragment().getActivity()、...)、またはフラグメントへのコールバックを作成する他の可能性について考えている間、エラーの他の理由について考えることを無駄にしませんでした。したがって、(mEditText) からテキストを取得しようとする EditText-Element は初期化されていませんでした:\

それを機能させるためのいくつかの変更:

View v = inflater.inflate(R.layout.dialog_choose_title, null);
mEditText = (EditText) v.findViewById(R.id.id_edit_choose_title);
mEditText.setText(mTitle);
builder.setView(v);

時間をありがとうゴカン!

于 2013-08-13T20:46:45.930 に答える