通常、アクティビティ+フラグメント通信では、onAttachメソッドで、コールバックインタフェースから定義したリスナーなどのコンテキストに物を割り当ててから、これを使用して基本的なアクティビティに実装された通信/呼び出し関数。例えばネストしたフラグメント/アクティビティ間の通信
:
public class TestDialogFragment extends DialogFragment {
private static final String ARGUMENT_KEYWORD = "argument_keyword";
private String keyword;
private Button okButton;
private CallbackInterface callbackInterface;
public interface CallbackInterface {
void onCallbackInvoked(String keyword);
}
public static TestDialogFragment newInstance(String keyword) {
Bundle args = new Bundle();
TestDialogFragment fragment = new TestDialogFragment();
args.putString(ARGUMENT_KEYWORD, keyword);
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
callbackInterface = (CallbackInterface) context;
}
catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement TestDialogFragment.CallbackInterface");
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
keyword = getArguments().getString(ARGUMENT_KEYWORD);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.dialogfragment_test, container, false);
okButton = (Button) contentView.findViewById(R.id.okButton);
okButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callbackInterface.onCallbackInvoked(keyword);
getDialog().dismiss();
}
});
return contentView;
}
}
すべてが順調に良いとですが、あなたは(すなわち、最初の断片を起動するgetSupportFragmentManagerを()を使用しますが、その後getChildFragmentManager()を使用して)ネストされたフラグメントを使用している場合はどう?
たとえば、MainActivity - > FragmentA - > FragmentB - > FragmentCの場合はどうなりますか?
FragmentCはMainActivityにコールバックをトリガすることができるようにFragmentCに至るまで、私のMainActivityのコンテキストのすべての方法を渡すために私のための方法はありますか?
逆はどうですか?私がMainActivityからFragmentCの中でいくつかの関数を呼び出して戻す方法はありますか?あるいは、「MainActivityは、FragmentC内の関数を呼び出すFragmentB内の同じ関数を呼び出しているFragmentAの関数を呼び出す」というようなことをしなければならないのでしょうか?
サードパーティライブラリを使用せずにAndroidフレームワーク内で/あなたは何をしますか? – KaliMa
@KaliMa私はポストをいくつかのアイディアで編集しました。率直に言って、私はあなたがそうした第三者図書館とほぼ同じ柔軟性のあるソリューションを見つけるつもりはないと思います。可能であれば、自分のソリューションを展開するよりも成熟したライブラリ(リンク先のライブラリなど)を使用するバグや問題が少なくなります。 – Karakuri