我的应用程序结构只是一个Activity
,一次显示一个Fragment
。活动的布局由xml文件定义,其中它呈现FloatingActionButton
。片段应拦截按钮上的点击事件,但永远不会调用onClick()
。
活动xml布局:
...
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:visibility="visible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
...
片段类:
...
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
adapterCity = new AdapterCity(getContext(), 0, Main.cities);
setListAdapter(adapterCity);
colorAccent = getContext().getResources().getColor(R.color.colorAccent);
fab = (FloatingActionButton) getActivity().findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openMap();
}
});
fab.setImageDrawable(getResources().getDrawable(R.drawable.ic_bubble_chart_black_24dp));
}
...
来自活动的UI事件似乎没有传播到attacched片段。这里发生了什么?我怎样才能解决我的问题?
答案 0 :(得分:1)
不是一个好习惯。片段不应该直接了解托管活动,也不应该从它们访问视图。这可以通过让您的活动实现一个自定义接口来实现,其中包含一些方法,例如myMethod()
,然后调用getActivity()
并将其类型化为接口并调用方法,如下所示:
((MyInterface)getActivity()).myMethod();
现在针对您的具体情况,我建议您传递某种变量,这些变量在每个片段中都会有所不同,并且基于您在myMethod()
的{{1}}实现中设置不同onClickListeners
的变量到你的FloatingActionButton
。