Android:LayoutInflater - 添加视图

时间:2012-07-17 08:58:53

标签: android listview android-layout view layout-inflater

我有以下代码,见下文。我想以编程方式将View添加到膨胀的布局中 - 因为我要添加到布局中的View的大小取决于我在ViewTree Observer中接收的另一个View的大小(ViewTree Observer的预绘制侦听器为您提供当使用“fill_parent”时,有机会获得布局项的大小,因此必须预先绘制它以获得大小)。

我该怎么做? LayoutInflater不提供添加View的方法。也许我只需要一个提示,我知道如何以编程方式创建视图 - 但是如何在这种情况下添加它们?

PS:getView方法用于ListView。

 @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            int type = getItemViewType(position);
            if (convertView == null) {
                switch (type) {
                    case TYPE_ITEM0:
                        convertView = mInflater.inflate(R.layout.event_details_headline, null);
                        TextView toptext = (TextView) convertView.findViewById(R.id.toptext);
                        toptext.setText(mData.get(0).getTitle());


                        final ImageView imageView = (ImageView) convertView.findViewById(R.id.flyer);
                        AwesomeActivity.imageLoader.DisplayRoundedImage(mData.get(0).getFlyerURL(), imageView);


                        final int[] flyerheight = {0};
                        final int[] flyerwidth = {0};
                        final ImageView border = (ImageView) convertView.findViewById(R.id.border);
                        ViewTreeObserver vto = imageView.getViewTreeObserver();
                        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                            public boolean onPreDraw() {

                                flyerheight[0] = imageView.getMeasuredHeight();
                                flyerwidth[0] = imageView.getMeasuredWidth();

                                // Here I want to add an ImageView based on flyerWidth and flyerHeight

                                return true;
                            }
                        });

                        break;
}

1 个答案:

答案 0 :(得分:2)

您需要找到'event_details_headline.xml'文件中使用的最外层类或视图组,并将其类型转换为变量。视图只能添加到ViewGroups或其子类。假设linearlayout是ur xml中最外面的视图组,ur inflate代码应该看起来像

LinearLayout layout = (LinearLayout)mInflater.inflate(
        R.layout.event_details_headline, null);
layout.addView(YOUR VIEW);
convertView = layout;

这应该有用。