我在sqlite表中有大約4k行,表中有7列。ListView和CursorAdapter對於大量數據的性能問題
我用我自己的CursorAdapter創建了工作ListView。
查詢是這樣SELECT * FROM [table] ORDER BY [column] DESC;
表具有第一列_id INTEGER PRIMARY KEY
但順序由另一列完成。
對於使用我自己的SQLiteOpenHelper
創建光標
mySQLiteOpenHelper pm = new mySQLiteOpenHelper();
SQLiteDatabase db = pm.getReadableDatabase();
Cursor c = db.query([tablename], new String[]{"_id", "[column]", "[column]", "[column]", "[column]", "[column]"}, null, null, null, null, "name ASC");
它傳遞給ListView控件
ListView lv = (ListView) findViewById(R.id.list_items);
lv.setOnItemClickListener(this);
pa = new ItemsAdapter(ItemsActivity.this, c);
在ItemsAdapter我已經重新實現
private LayoutInflater inflater;
@Override
public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
return inflater.inflate(R.layout.items_row, arg2,false);
}
子打開分貝
和
@Override
public void bindView(View rtn, Context arg1, Cursor c) {
item_name = (TextView) rtn.findViewById(R.id.item_name);
item_description = (TextView) rtn.findViewById(R.id.item_description);
item_catalog_id = (TextView) rtn.findViewById(R.id.item_catalog_id);
item_true_price = (TextView) rtn.findViewById(R.id.item_true_price);
item_display_price = (TextView) rtn.findViewById(R.id.item_display_price);
item_button = (Button) rtn.findViewById(R.id.item_button);
item = new MyWrapClass(c);
// some work with item to fill up all UI items
}
MyWrapClass
public final class MyWrapClass {
public String name = "";
public String notes = "";
public int id = 0;
public String catalogId = "";
public int price = 0;
public int publicPrice = 0;
public String groupPrice = "";
public int order_count = 0;
public MyWrapClass(Cursor c) {
try {
id = c.getInt(0);
catalogId = c.getString(1);
name = c.getString(2);
price = c.getInt(3);
publicPrice = c.getInt(4);
groupPrice = c.getString(5);
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
}
ListView中使用了相同的行初始化代碼,有它的工作非常好。
所以,如果你可以從這段代碼說,有什麼理由,爲什麼要加載6行項目(一個屏幕高度)和滾動刷新(意味着當你滾動一個項目)需要1分鐘?
只需加載ListView需要2分鐘,然後大約一半的時間向上/向下滾動一個列表項。性能問題在哪裏?
什麼是 「MyWrapClass」? – dymmeh
@dymmeh添加了其代碼 –
爲什麼只是不使用日誌記錄以找到瓶頸? –