因此,我无法完整地发布整个代码,因为它会在文件中分散,但我会尽力解释。
我的android应用程序是按以下方式构建的:
MainActivity
|__Toolbar
|__ViewPager
| |__DestinationListFragment
| |__DestinationMapFragment
|
|___FAB
DestinationListFragment 包含一个RecyclerView,它显示来自Firebase Firestore数据库的数据。 DestinationMapFragment 执行相同操作,但在地图上填充它们 - 对于此问题,此片段无关紧要。
FAB存在于 MainActivity 的布局中,因为它会显示正确的高程,我可以轻松地.hide()
或.show()
。点击后,它会打开一个对话框(其代码位于 FilterDialogFragment ),允许用户过滤这些项目。
FilterDialogFragment 有一个FilterListener接口,如下所示:
interface FilterListener {
void onFilter(Filters filters);
}
private FilterListener mFilterListener;
然后在 DestinationListFragment 中实现,如此
public class DestinationListFragment extends Fragment implements
FilterDialogFragment.FilterListener,
DestinationAdapter.OnDestinationSelectedListener {
/* some code */
@Override
public void onFilter(Filters filters){
/* some code */
}
}
现在,要在 FilterFragmentDialog 中实例化mFilterListener
,我在其onAttach()
方法中调用以下内容:
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof FilterListener) {
mFilterListener = (FilterListener) context;
}
}
但是,mFilterListener永远不会被实例化,因为context
是 MainActivity 而不是 DestinationListFragment ,因为FAB所在的位置是因为不是FilterListener的实例。我尝试将FAB移动到 DestinationListFragment 的布局,但传递的上下文仍然是 MainActivity &#39。我无法将代码移至 MainActivity ,因为 DestinationListFragment 中的其他方法依赖于此。如何更改代码以便传递 DestinationListFragment 的上下文而不是 MainActivity ?
我使用Firebase's sample app作为过滤代码的基础。除听众外,一切似乎都在。
答案 0 :(得分:0)
在 MainActivity 中,我实施了FilterDialogFragment.FilterListener
并覆盖onFilter()
,如下所示:
@Override
public void onFilter(Filters filters) {
DestinationListFragment fragment = (DestinationListFragment) mPagerAdapter.getItem(0);
fragment.onFilter(filters);
}