我有一個使用CursorAdapter以表格格式繪製數據集的ListActivity。我最初使用TableLayout(並繪製了整個表格),但是我擔心這會佔用太多的內存(並且繪製頁面很慢),所以我現在正在使用CursorAdapter進行調查。CursorAdapter慢/滾動
爲活動主體的XML佈局看起來像這樣(請注意使用HorizontalScrollView,這可能是一個原因):
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/layout_query_viewer">
<TextView
android:id="@+id/query_table_name"
style="@style/ActivityTitle" />
<HorizontalScrollView
android:id="@+id/hsvMainContent"
android:scrollbars="none"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/llMainContent"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/fixed_headers"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@android:id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
CursorAdapter的是這樣的:
private class QueryAdapter extends CursorAdapter {
public QueryAdapter(Context context) {
super(context, null);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
/*
* I'm deliberately not inflating here as I'm synchronizing a remote
* database, so I don't know how many columns my query will return.
*/
LinearLayout layout = new LinearLayout(context);
ViewHolder holder = new ViewHolder(cursor.getColumnCount());
layout.setTag(holder);
for (int i = 1; i < cursor.getColumnCount(); i++) {
TextView cell = new TextView(context);
holder.cells[i] = cell;
cell.setBackgroundColor(Color.WHITE);
cell.setMinimumWidth(mColumnWidths[i]);
cell.setPadding(1, 1, 1, 1);
layout.addView(cell);
}
return layout;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder)view.getTag();
for (int i = 1; i < cursor.getColumnCount(); i++) {
holder.cells[i].setText(cursor.getString(i));
}
}
}
static class ViewHolder {
TextView[] cells;
public ViewHolder(int size) {
cells = new TextView[size];
}
}
當我畫完整個桌子時,我很滿意滾動性能,但現在我切換到了CursorAdapter,滾動是生澀的(我的意思是不可接受的生澀)。 CursorAdapter方法在邏輯上看來在架構上是正確的決定,但除非我能解決滾動問題,否則我將不得不返回繪製整個表格。
有沒有其他人經歷過這個問題,或者可以闡明我做錯了什麼?
我們爲Android TweetDeck做了同樣的事情。 Android的標準ListView組件是一大堆垃圾。 – mxcl 2012-02-21 16:10:16
你可以分享一些關於你做什麼的高層次細節嗎?謝謝! – ahmedre 2012-05-24 20:24:31
我很好奇聽到關於這個的索姆指針。有完全相同的問題。 – jannej 2013-04-10 13:27:35