2011-07-02 44 views
1

製作了一個自定義列表視圖,其中包含一個圖像,兩個文本視圖和一個複選框。我可以確定複選框被選中/取消選中,但是這個設計的問題是非常慢的滾動。如果我測試它到真實設備中,這會變得更快嗎?Android自定義列表加載非常緩慢

public class ListViewActivity extends ListActivity { 

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    ArrayAdapter<Model> compositeAdapter = new CompositeAdapter(this, 
      getModel()); 
    setListAdapter(compositeAdapter); 
    ListView lv = getListView(); 
    lv.setFastScrollEnabled(true); 
    } 
} 

private class CompositeAdapter extends ArrayAdapter<Model> { 
    private final List<Model> list; 
    private final Activity context; 

    public CompositeAdapter(Activity context, List<Model> list) { 
     super(context, R.layout.listviewactivitylayout, list); 
     this.context = context; 
     this.list = list; 
    } 

    private class ViewHolder{ 
     protected TextView textView1; 
     protected TextView textView2; 
     protected ImageView imageView; 
     protected CheckBox ckBox; 
    } 
    public View getView (int position, View convertView, ViewGroup parent) { 
     View view = null; 
     final ViewHolder vh; 
     if(convertView==null){ 
      LayoutInflater li = context.getLayoutInflater(); 
      view = li.inflate(R.layout.listviewactivitylayout, null); 
      vh = new ViewHolder(); 
      vh.ckBox =(CheckBox) view.findViewById(R.id.list_view_layout_checkbox); 
      vh.imageView = (ImageView) view.findViewById(R.id.listView_image_view); 
      vh.textView1 = (TextView)view.findViewById(R.id.list_view_layout_text_view1); 
      vh.textView2= (TextView)view.findViewById(R.id.list_view_text_view2); 
      view.setTag(vh); 
     } 
     else{ 
      view= convertView; 
      vh = (ViewHolder)view.getTag(); 
     } 

/** 
** sending text and images to the each of the list view 
** 
*/ 
+0

你在模擬器或手機上測試這個嗎?仿真器往往會因我的經驗而變得非常慢,所以如果您使用仿真器,那麼您的代碼可能沒有任何問題。 – redbmk

+0

發佈您的代碼。沒有它,很難說出了什麼問題。 –

+0

@redEvo - > true。仿真器的速度是痛苦的...^H^H^H脖子 –

回答

4

您正在下載圖片。需要在單獨的線程中處理,並在解碼時放置在imageView上。

這裏是一個優秀的項目,將幫助你做到這一點。 Lazy load images

編輯

通過看你的代碼有幾件事我注意到:

第一:心不是你asigning畫面任何地方。 (使用延遲加載適配器)

第二個:您的複選框選擇會弄亂。你需要跟蹤狀態的檢查位置並重繪在getView(hashmap或更好的稀疏陣列)

第三是擺脫你所使用的幫手視圖。你不需要它。 (代碼中的View view的市場)。

因此,如果convertView==null只使用convertView=inflate...並在末尾返回那個。

第四個作爲一個有用的提示:將適配器類移動到新的類java文件。您已經保存活動參考和列表,您可以減少活動中的代碼量。