- CursorAdapter slow/jerky scroll
- <?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>
- 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];
- }
- }