0

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

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

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;
}
4

1 回答 1

2

您需要找到“event_details_headline.xml”文件中使用的最外层类或视图组并将其类型转换为变量。视图只能添加到 ViewGroups 或其子类中。假设线性布局是你的xml中最外层的视图组,你的膨胀代码应该是这样的

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

这应该有效。

于 2012-07-17T09:07:12.180 回答