-2

私はメインクラスを持っています:

public class MainFragment extends Fragment implements OnClickListener, OnMarkerClickListener {}

ダイアログクラスがあります:

public class PedirTaxiDialog extends SimpleDialogFragment implements
    OnClickListener{}

例:SimpleDialogFragmentを開始するFragmentAがあります(ボックスにEditTextがあります)。EditText から FragmenaA に値を戻すにはどうすればよいですか? いろいろ作ってみますが・・・うまくいきません。お願い助けて !!

私の MainFragment クラスでは、ダイアログ クラスを表示します。

FragmentActivity activity;
activity = (FragmentActivity) getActivity().new PedirTaxiDialog().show(activity.getSupportFragmentManager(), "Salvar Favoritos");

ダイアログクラスでユーザーが入力した値を取得します。MainFragment で PedirTaxiDialog を返すにはどうすればよいですか?

クラスのリンク:

PedirTaxiDialog.java

MainFragment.java

4

2 に答える 2

1

ダイアログを作成している場所にこのコードがあるとします

FragmentManager fm = getActivity()
                     .getSupportFragmentManager();
             PedirTaxiDialog dialog = PedirTaxiDialog();
             dialog.setTargetFragment(MainFragment.this, "some request tag");
             dialog.show(fm, "Salvar Favoritos");

メソッドsetTargetFragment()を呼び出すことで、DialogFragment を使用して開始するときにアクティビティから結果を取得するため、DialogFragment から結果を取得するオプションを有効にしますstartActivityForResult()

したがって、DialogFragment で、ユーザーが [OK] ボタンをクリックしたときに、OnClickListener でインテントを作成し、ユーザーが入力した文字列追加テキストとして配置し、Result_OK を設定して、次のgetTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, yourIntent)ように呼び出す必要があります。

Intent i = new Intent();
i.putExtra("textInput", text);
i.setResult(Activity.RESULT_OK);
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, i);

そして、MainFragment オーバーライドonActivityResult()メソッドで:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK && requestCode == "some request tag") {
        String text = getStringExtra("textInput);
    }
}
于 2015-06-12T13:40:04.310 に答える
0

DialogFragment の onAttach(Activity) メソッドをオーバーライドすると、Dialog から Activity にアクセスできます。

例えば:

private MainActivity controller;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.controller = (MainActivity) activity;
}

@Override
public void onDetach() {
    this.controller = null;
    super.onDetach();
}

後で、コントローラー オブジェクトを使用してアクティビティのメソッドを呼び出すことができます。

その後、アクティビティでフラグメントを更新できます。

また、ベスト プラクティスは、アクティビティにコールバック インターフェイスを実装させ、アクティビティ クラス自体を使用する代わりに、このコールバック インターフェイスをコントローラー変数のクラスとして使用することです。

于 2015-06-12T13:20:47.310 に答える