因此通常在Activity +片段通信中,在onAttach方法中,您可以將某些內容分配給Context,例如從回調接口定義的偵聽器,然後使用它溝通/調用基礎活動中實施的功能。嵌套片段/活動之間的通信(兩種方式)
例如:
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調用FragmentA中的一個函數,它調用FragmentB中的相同函數,調用FragmentC中的函數來完成我們想要的功能」?
你會在Android框架/不使用第三方庫的情況下做什麼? – KaliMa
@KaliMa我編輯了一些想法的帖子。坦率地說,我認爲你不會找到像第三方庫那樣靈活的解決方案。很有可能你使用成熟的庫(比如我鏈接的)會比使用自己的解決方案更少的bug和問題。 – Karakuri