我有一个活动,其中FrameLayout用作片段容器。每当在此FrameLayout中添加片段时,我想设置此FrameLayout可点击(以避免每个点击事件都通过片段)。
我已经读过,我可以使用onAttachFragment
来检测何时将片段添加到活动中。
所以我在我的活动中添加了这段代码:
@Override
public void onAttachFragment(Fragment fragment) {
fragment.getView().setClickable(true);
super.onAttachFragment(fragment);
}
但由于某种原因,这种方法永远不会被调用。
答案 0 :(得分:1)
调用Fragment
时,onAttachFragment()
的视图不会被夸大。引用docs:
void onAttachFragment(Fragment fragment)
片段出现时调用 附加到此活动后,立即后调用它
Fragment.onAttach()
方法和之前的Fragment.onCreate()
。
因此,调用fragment.getView()
没有意义,因为在onCreateView()
(在onCreate()
之后发生)之前视图不会膨胀。
作为一种替代方法,您可以将Fragment
的布局设置为可点击或不作为其参数的一部分:
public class MyFragment extends Fragment {
public static MyFragment getInstance(boolean isClickable) {
MyFragment frag = new MyFragment();
Bundle args = new Bundle();
args.putBoolean("key", isClickable);
frag.setArguments(args);
return frag;
}
//...
private boolean isClickable() {
return getArguments().getBoolean("key");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = //Inflate view...
view.setClickable(isClickable());
return view;
}
或者,您可以采用另一种方式,并使用interface
onCreateView()
内部Fragment
调用Activity
,在其中“询问”它所附加的html,body{height:100%;padding:0;margin:0;}
.box{height:100%;position:relative;background-color:grey}
它的根视图是否应该是可点击的。