我有一个活动,其中使用FrameLayout作为片段容器。每当在此FrameLayout中添加片段时,我都希望设置此FrameLayout可点击(以避免每次单击事件通过片段)。
我已经读到,我可以使用onAttachFragment
来检测什么时候添加了片段。
因此,我在我的活动中添加了以下代码:
@Override
public void onAttachFragment(Fragment fragment) {
fragment.getView().setClickable(true);
super.onAttachFragment(fragment);
}
但出于某种原因,这个方法从未被调用过。
发布于 2016-03-31 03:07:12
当调用Fragment
时,onAttachFragment()
的视图不会膨胀。
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
,它在Fragment
的onCreateView()
中被称为“询问”它附加到的Activity
是否应该是可点击的。
https://stackoverflow.com/questions/36331173
复制相似问题