2010-05-03 68 views
1

我想改善列表視圖的性能。Android中的CustomListAdapter問題?獲得ClassCast異常?怎麼樣?

這是我的適配器中的getView方法的代碼?

public View getView(int arg0, View text_view_name, ViewGroup parent) { 
    try { 

     if (text_view_name == null) { 
      text_view_name = mInflater.inflate(
        R.layout.bs_content_list_item1, null); 
      text_view_name.setTag(R.id.text1_detail1, text_view_name 
        .findViewById(R.id.text1_detail1)); 
      text_view_name.setTag(R.id.text3_detail1, text_view_name 
        .findViewById(R.id.text3_detail1)); 
      text_view_name.setTag(R.id.eve_img_detail1, text_view_name 
        .findViewById(R.id.eve_img_detail1)); 
     } 

     text1 = (TextView) text_view_name.getTag(R.id.text1_detail1); 
     // text2 = (TextView) text_view_name.getTag(R.id.text2); 
     text3 = (TextView) text_view_name.getTag(R.id.text3_detail1); 
     img = (ImageView) text_view_name.getTag(R.id.eve_img_detail1); 
     text1.setText(VAL1[arg0]); 
     text3.setText(VAL3[arg0]); 

     if (!mBusy) { 
      img_value = new URL(VAL4[arg0]); 
      mIcon11 = BitmapFactory.decodeStream(img_value.openConnection() 
        .getInputStream()); 
      img.setImageBitmap(mIcon11); 

      text_view_name.setTag(R.id.eve_img_detail1, null); 
     } else { 
      img.setImageResource(R.drawable.icon); 
      text_view_name.setTag(R.id.eve_img_detail1, text_view_name 
        .findViewById(R.id.eve_img_detail1)); 
     } 

    } catch (Exception e) { 
     name = "Exception in MultiLine_bar_details1 getView"; 
     Log.v(TAG, name + e); 
    } 
    return text_view_name; 
} 

這是scrollstatechanged方法的代碼:獲取異常在空閒狀態

public void onScrollStateChanged(AbsListView view, int scrollState) { 
    switch (scrollState) { 
    case OnScrollListener.SCROLL_STATE_IDLE: 
     try { 
      MultiLine_bar_details1.mBusy = false; 

      int first = view.getFirstVisiblePosition(); 
      int count = view.getCount(); 

      for (int i = 0; i < count; i++) { 
       ImageView t = (ImageView) view.getChildAt(i);// here getting the ClassCastException 
       if (t.getTag(R.id.eve_img_detail1) != null) { 

        MultiLine_bar_details1.img_value = new URL(
          MultiLine_bar_details1.VAL4[first + i]); 

        MultiLine_bar_details1.mIcon11 = BitmapFactory 
          .decodeStream(MultiLine_bar_details1.img_value 
            .openConnection().getInputStream()); 
        MultiLine_bar_details1.img.setImageBitmap(MultiLine_bar_details1.mIcon11); 
        t.setTag(R.id.eve_img_detail1, null); 
       } 
      } 
     } catch (Exception e) { 
      Log.v(TAG, "Idle" + e); 
     } 

     // mStatus.setText("Idle"); 
     break; 
    case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: 
     MultiLine_bar_details1.mBusy = true; 

     break; 
    case OnScrollListener.SCROLL_STATE_FLING: 
     MultiLine_bar_details1.mBusy = true; 
     break; 
    } 
} 

05-03 16:47:15.201: VERBOSE/BS_Bars(258): Idlejava.lang.ClassCastException: android.widget.LinearLayout 

這是非常複雜,我適當地得到輸出。實際上我有自定義適配器的列表視圖。該圖標使得listview滾動非常緩慢。我從圖像URL獲取圖標圖標。直到這個(上面的代碼)我可以提高我的列表視圖的滾動性能。但圖像圖標在相應的順序中不合適。其動態變化時,我滾動列表視圖..

我提到commonsware busy coder guidethis blog

編輯: 我非常大的問題是「我們如何才能訪問使用參數AbsListView scrollstatechanged圖像視圖?」

什麼問題呢?如何做得更好?任何想法?

回答

1

什麼是bs_content_list_item1.xml的頂層視圖?您將ListView.getChildAt(i)的結果投射到ImageView,看起來它不是ImageView。

+0

是的。但我怎樣才能把這個圖像視圖? bs_content_list_item1.xml具有列表視圖的內容。 main.xml文件中的主要listview。 – Praveen 2010-05-03 17:49:20