2012-07-17 62 views
0

我有以下代碼,請參見下文。我想以編程方式將視圖添加到膨脹的佈局 - 因爲我希望添加到佈局的視圖的大小取決於我在ViewTree Observer中接收到的另一個視圖的大小(ViewTree Observer的預渲染偵聽器爲您提供了在使用「fill_parent」時獲得佈局項目大小的機會,因此必須預先繪製才能獲得大小)。Android:LayoutInflater - 添加視圖

我該怎麼做? 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; 
} 

回答

2

您需要找到'event_details_headline.xml'文件中使用的最外層類或視圖組,並將其轉換爲變量。視圖只能添加到ViewGroups或其子類中。假設線性佈局是你的xml中最外層的視圖組,你的膨脹代碼應該看起來像

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

這應該可行。

+0

感謝您的快速響應。 – 2012-07-17 09:25:25