2013-02-18 49 views
1

我需要在listview(android)中維護3000個列表項,但繼續滾動會出錯。爲了管理這個,我打算在加載列表視圖時顯示進度對話框。如何啓用進度條,同時在Android中加載自定義列表視圖

請教我如何在android中做到這一點。

+0

您以前沒有使用過異步任務嗎?你只需要表現出onPreExcute(進度對話框),並在doInBackground()獲取的3000個項目,最後駁回()在onPOST等 – 2013-02-18 06:46:10

+0

對話框喜用的AsyncTask和數據是在我的本地數據庫已經上市,但滾動4時-5次不斷導致錯誤。 – Dhamodharan 2013-02-18 06:50:45

+0

除了使用LazyList的圖像,你應該使用視圖架.. – 2013-02-18 06:51:54

回答

1

您可以使用lazylist爲您的問題在這裏link檢查它。你可以找到你的解決方案。您可以使用異步任務,但整個3000項目將立即加載。如果您使用LazyList,那麼您將首先加載幾件物品,並且當您向下滾動時,更多物品將被添加到您的列表中。

0

ListView本身是一個神話般的組件,可用於呈現記錄中的數字。 *有相同觀點的循環周而復始,從而避免內存泄漏和高效的管理*

您必須使用: 懶列表圖像和視圖持有人必須是管理重新可用性有效管理的意見。

回收概念:

每當ListView控件需要在屏幕上顯示一個新行,它會調用其適配器getView()方法。如您所知,getView()接受三個參數參數:行位置,convertView和父ViewGroup。

convertView參數本質上是一個「ScrapView」。當ListView要求您循環使用行佈局時,它將具有非空值。所以,當convertView不爲null時,你應該簡單地更新它的內容而不是膨脹一個新的行佈局。在適配器中的getView()的代碼看起來有點像:

public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.your_layout, null); 
    } 

    TextView text = (TextView) convertView.findViewById(R.id.text); 
    text.setText("Position " + position); 

    return convertView; 
} 

查看持有人模式 查找內部視圖內膨脹的佈局是在Android上最常用的操作之一。這通常通過名爲findViewById()的View方法完成。該方法將遞歸地遍歷視圖樹,尋找具有給定ID碼的孩子。在靜態UI佈局上使用findViewById()是完全正確的,但正如您所見,ListView在滾動時非常頻繁地調用適配器的getView()。 findViewById()可能會在ListViews中顯示滾動性能 - 特別是如果你的行佈局不平凡的話。

觀持有人格局即將減少()調用適配器的getView()findViewById的數量。在實踐中,視圖持有者是一個輕量級的內部類,可以直接引用所有內部視圖。您在充氣後將其作爲標記存儲在行視圖中。這樣,您只需在首次創建佈局時使用findViewById()。以下是應用了View Holder模式的代碼示例:

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.your_layout, null); 

     holder = new ViewHolder(); 
     holder.textView01 = (TextView) convertView.findViewById(R.id.text); 

     convertView.setTag(holder); 
    } else { 
     holder = convertView.getTag(); 
    } 

    holder.textView01.setText("Position " + position); 

    return convertView; 
} 

private static class ViewHolder { 
    public TextView textView01; 
} 
相關問題