首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >活动未调用的onAttachFragment

活动未调用的onAttachFragment
EN

Stack Overflow用户
提问于 2016-03-31 02:46:34
回答 1查看 4.1K关注 0票数 1

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

我已经读到,我可以使用onAttachFragment来检测什么时候添加了片段。

因此,我在我的活动中添加了以下代码:

代码语言:javascript
运行
AI代码解释
复制
@Override
public void onAttachFragment(Fragment fragment) {
    fragment.getView().setClickable(true);
    super.onAttachFragment(fragment);
}

但出于某种原因,这个方法从未被调用过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-31 03:07:12

当调用Fragment时,onAttachFragment()的视图不会膨胀。

void onAttachFragment(Fragment fragment) 在将片段附加到此活动时调用,在调用其Fragment.onAttach()方法之后立即调用,在 Fragment.onCreate()之前立即调用。

因此,调用fragment.getView()是没有意义的,因为视图直到onCreateView() (发生在onCreate()之后)才会膨胀。

作为一种变通的方法,您可以将Fragment的布局设置为可点击的,也可以不设置为其参数的一部分:

代码语言:javascript
运行
AI代码解释
复制
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,它在FragmentonCreateView()中被称为“询问”它附加到的Activity是否应该是可点击的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36331173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档