2016-06-21 18 views
1

私は多くのアクティビティで使用されるダイアログAを持っています。私は新しいダイアログBを作成し、Aからの呼び出しを得るためのインターフェースを実装しました。どちらの場合も、私はダイアログの断片を使用しました。多くの活動のために私が使用してダイアログフラグメントの結果をダイアログフラグメントに受け取る方法

if (getActivity() instanceof MyActivity) 
((MyActivity) getActivity()).manageSelectedItem(); 

からのコールバックを管理することができます。しかし、ダイアログAが別のダイアログBでホストされている場合は、その後どのようにコールバックを管理すること。

Activity/FragmentActivity/Fragment on thisに基づいてソリューションを検索して見つけましたが、DialogFragmentの問題を解決できません。

+0

再び質問は何ですか?としてここ

はコード

ダイアログDialogTwoですかあなたは 'DialogFragment'Bから' DialogFragment'Aにデータを渡そうとしていますか?見つけた解決策、その問題は何ですか? –

答えて

1

私はissue.IがちょうどダイアログB.Checksのインターフェイスを実装し、ホスティングダイアログが活動/ダイアログであるかどうかのダイアログAでのonCreateメソッドのインターフェイスを初期化し解決しています。ダイアログBから

public class DialogTwo extends DialogFragment { 


@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    try { 
     if(!(getActivity() instanceof SelectedItemListener)) { 
      callback = (SelectedItemListener) getTargetFragment(); 
     } 
    } catch (Exception e) { 
     throw new ClassCastException("Calling Fragment must implement SelectedItemListener"); 
    } 

} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return super.onCreateView(inflater, container, savedInstanceState); 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), R.style.AlertDialogCustom)); 

    builder.setTitle(R.string.select_color) 
      .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        if (getActivity() instanceof SelectedItemListener) { 
          ((NewExerciseActivity) getActivity()).manageSelectedItem(); 
        }else { 
         callback.manageSelectedItem(); 
        } 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
       } 
      }); 

    return builder.create(); 
    } 
} 

コール:

private void showDialog() { 
    FragmentActivity activity = (FragmentActivity) getActivity(); 
    FragmentManager fm = activity.getSupportFragmentManager(); 
    DialogTwo dialogTwo = new DialogTwo(); 
    dialogTwo.setTargetFragment(this,0); 
    dialogTwo.show(fm, "dialogTwo"); 
} 

@Override 
public void manageSelectedItem() { 
     //do something 
} 
1

Busを参照するか、BroadcastReceiverを使用することをお勧めします。複数のコールバックがコードを結合することができますが、これは維持管理にとって恐ろしいことです。

+0

ありがとうございます。私は私のソリューションを掲載しました。 – Patriotic

1

回答はheareです。または、フラグメントbeerwinアクティビティをロックすることもできます。

getSuportFragmentManager().findFragmentByTag(TAG_FRAGMENT_A).callback(); 
+0

ありがとうございます。私は私のソリューションを掲載しました。 – Patriotic

関連する問題