onAttachFragment未被活动

时间:2016-03-31 10:46:35

标签: android android-fragments

我有一个活动,其中FrameLayout用作片段容器。每当在此FrameLayout中添加片段时,我想设置此FrameLayout可点击(以避免每个点击事件都通过片段)。

我已经读过,我可以使用onAttachFragment来检测何时将片段添加到活动中。

所以我在我的活动中添加了这段代码:

@Override
public void onAttachFragment(Fragment fragment) {
    fragment.getView().setClickable(true);
    super.onAttachFragment(fragment);
}

但由于某种原因,这种方法永远不会被调用。

1 个答案:

答案 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}它的根视图是否应该是可点击的。