У меня есть фрагмент (FragmentSearchResults), который содержит результаты, извлеченные из базы данных, в которой есть кнопка «Фильтры». Когда пользователь нажимает на такую кнопку, создается экземпляр класса (FiltersDialog), расширяющего BottomSheetDialogFragment, чтобы пользователь мог установить свои фильтры. Когда пользователь закрывает действие FiltersDialog, значения передаются из FiltersDialog в FragmentSearchResults.
public class FragmentSearchResults extends Fragment implements FiltersDialog.FilterListener {
/* code */
ImageButton btnFilter = myFragment.findViewById(R.id.btn_filters);
btnFilter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showFilters();
}
});
}
private void showFilters() {
FiltersDialog filtersDialog = new FiltersDialog();
filtersDialog.show(((FragmentActivity) mContext).getSupportFragmentManager(), "argument");
}
@Override
public void onAttach(@NotNull Context context) {
super.onAttach(context);
mContext = context;
}
@Override
public void onFiltersSet(Map filters) {
// apply filters selected by user
}
public interface FilterListener {
void onFiltersSet(Map filters);
}
}
public class FiltersDialog extends BottomSheetDialogFragment {
private FilterListener mListener;
private Map<String, Object> mFilters;
public FiltersDialog() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.layout_filters_dialog, container, false);
TextView txtSave = v.findViewById(R.id.txt_save_filters);
mTxtSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFiltersSet(mFilters);
}
});
return v;
}
public interface FilterListener {
void onFiltersSet(Map filters);
}
@Override
public void onAttach(@NotNull Context context) {
super.onAttach(context);
if (context instanceof FilterListener) {
mListener = (FilterListener) context;
}
else {
// Here's the error, as the activity Home.java containing FragmentSearchResults
// does not implement FilterListener, FragmentSearchResults does
throw new RuntimeException(context.toString() + " must implement FilterListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
}
Проблема в том, что FilterListener должен быть реализован во FragmentSearchResults, но я передаю контекст Home действия.
Как я могу реализовать FilterListener во фрагменте?