1

我想以编程方式将一些图形添加到布局中。我想根据xml layout file.

onCreateView如果我尝试在或 in 中访问它们,布局中图形的位置都是 0 onViewCreated。这可能是因为布局还没有完成膨胀。

我在哪里可以连接我的代码以确保片段的布局已经完成膨胀?

目前我已经使用viewTreeObserver(见下面的代码)解决了它,但这真的是最聪明的方法吗?

我正在一个片段内工作。

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {     
        View v = inflater.inflate(R.layout.myfrg, container, false);
        mMainLayoutCanvas = (RelativeLayout)v.findViewById(R.id.myfrg_mainlayout);
        mMainLayoutCanvas.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                initializeUI();
            }
        });
        return v;
    }
4

2 回答 2

1

onCreateView 膨胀Fragment的布局。您只能在 onCreateView 返回后找到视图。我会寻找onActivityCreated()方法来查找视图,然后更新/定位它们。

可能有一个完全不同的解决方案,我刚开始使用 Android

于 2013-05-07T15:39:56.700 回答
0

可以在膨胀的片段布局上设置 preDraw 侦听器,这将在所有维度都已解决后给您一个回调。

layout = inflater.inflate(...);
ViewTreeObserver obs = layout.getViewTreeObserver();
obs.addOnPreDrawListener(mListener);

完成操作后不要忘记删除侦听器,否则这将导致无限循环,因为任何布局操作都会导致再次调用它。

obs.removePreDrawListener(mListener);
于 2014-12-19T19:35:03.473 回答