0

次のコードがあります。以下を参照してください。膨張したレイアウトにプログラムでビューを追加したい - レイアウトに追加したいビューのサイズは、ViewTree オブザーバーで受信している別のビューのサイズに依存するため (ViewTree オブザーバーの事前描画リスナーは、 「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;
}
4

1 に答える 1

2

「event_details_headline.xml」ファイルで使用されている最も外側のクラスまたはビューグループを見つけて、変数に型キャストする必要があります。ビューは、ViewGroup またはそのサブクラスにのみ追加できます。linearlayout が ur xml の最も外側のビュー グループであると仮定すると、ur inflate コードは次のようになります。

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

これはうまくいくはずです。

于 2012-07-17T09:07:12.180 に答える