Fragment show DialogFragment,传递数据的最佳方式
- 在Fragment中setTargetFragment
SearchOptionDialogFragment dialog = new SearchOptionDialogFragment();
dialog.setTargetFragment(this, DIALOG_SEARCH_OPTION);
dialog.show(getParentFragmentManager(), "");
- 在DialogFragment中声明Listener
public interface SearchOptionDialogListener {
//把需要传递的数据放在参数里
//比如void onDialogPositiveClick(SearchOptionDialogFragment dialog, int selectedPostion);
void onDialogPositiveClick(SearchOptionDialogFragment dialog);
void onDialogNegativeClick(SearchOptionDialogFragment dialog);
}
- Fragment implement SearchOptionDialogListener
public class SearchFragment extends BaseFragment implements SearchOptionDialogFragment.SearchOptionDialogListener {
public void onDialogPositiveClick(SearchOptionDialogFragment dialog) {
//doSomething
dialog.dismiss();
}
@Override
public void onDialogNegativeClick(SearchOptionDialogFragment dialog) {
//doSomething
dialog.dismiss();
}
}
- DialogFragment调用Listener,传递数据
view.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment targetFragment = getTargetFragment();
if (targetFragment instanceof SearchOptionDialogListener) {
((SearchOptionDialogListener) targetFragment).onDialogPositiveClick(SearchOptionDialogFragment.this);
}
}
});
view.findViewById(R.id.btn_cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment targetFragment = getTargetFragment();
if (targetFragment instanceof SearchOptionDialogListener) {
((SearchOptionDialogListener) targetFragment).onDialogNegativeClick(SearchOptionDialogFragment.this);
} }
});
参考 https://lukeneedham.medium.com/listeners-in-dialogfragments-be636bd7f480