6

フラグメントAがあり、そこから次のDialogFragmentように開きます。

FragmentActivity fragmentActivity = (FragmentActivity) view.getContext();
FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
Fragment prev = fragmentActivity.getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
  ft.remove(prev);
}
ft.addToBackStack(null);
DialogFragment fragmentDialog = MyDialogFragment.newInstance();
fragmentDialog.show(ft, "dialog");

このダイアログから、(ポジティブ/ニュートラル/ネガティブ)ボタンをクリックした後、フラグメントAを置き換えるフラグメントBを開きます。

ダイアログのonClickメソッドで、親アクティビティのコールバックメソッドを実行します。

@Override
public void onClick(DialogInterface dialog, int which) {
  switch(which) {
    case DialogInterface.BUTTON_NEUTRAL:
      detailsCallbacks.openMoreDetails(); 
      break;
  }
}

そして最後に、私のアクティビティのopenMoreDetails()メソッドは次のようになります。

@Override
public void openMoreDetails() {
  Fragment fragmentB = Fragment.newInstance();
  FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  ft.replace(R.id.fragment_container, fragmentB);
  ft.addToBackStack(null);
  ft.commit();
}

私が得るものは奇妙です。フラグメントBは、ほんの一瞬だけ画面上で点滅し、その後、フラグメントAに再び置き換えられます(カバーされますか?)。

上ボタンをクリックすると、フラグメントAからも戻ってくるので、これらのトランザクションはバックスタックに追加されませんでした。フラグメントBを表示したいのですが、上ボタンを押すとフラグメントAに戻ります。

どういうわけか可能ですか?そして、私のアプローチの何が問題になっていますか?

4

3 に答える 3

3

同じ問題がありました:

フラグメント A は、カスタム ダイアログ フラグメントを表示します。

ダイアログ フラグメントのボタンの 1 つをクリックすると、ダイアログを削除してフラグメント B を表示したいと考えました。

フラグメント B が表示され、すぐに消えます。画面に再びフラグメント A が表示されました。

私の最初の実装で間違っていたのは:

private void onClickInscription() {
    FragmentInscription frag = FragmentInscription.newInstance();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.main, frag);
    ft.addToBackStack(null);
    ft.commit();
    dismiss();
}

そして正しいもの:

private void onClickInscription() {
    dismiss();
    FragmentInscription frag = FragmentInscription.newInstance();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.main, frag);
    ft.addToBackStack(null);
    ft.commit();
}

したがって、ダイアログで最初に却下を呼び出してから、FragmentTransction

于 2013-06-22T14:16:01.677 に答える
0

FragmentA からダイアログを開くべきではありません。FragmentA からアクティビティへのコールバックを実装し、アクティビティがすべてのフラグメント トランザクションを処理できるようにします。

于 2013-02-01T16:28:47.750 に答える