0

我正在编写我的第一个 android 应用程序并来自 iOS 世界。我有一个相当大的查询(约 100k+ 行),我想通过滚动显示在表格视图中。

当我在 iPhone 应用程序中构建同样的功能时,他们的 tableview 版本可以自动处理屏幕上的行。这使得显示器很容易开始工作。

从我所见,看来 android tableview 正在加载整个结果,并且速度大大减慢。

android tableview 类是否有任何内置功能可以实现某种形式的“延迟加载”,还是我必须在查询中编写一些处理程序和限制?

例如伪代码:

 // Event Method:
 //    tableview "onscroll"
 //        get current table view index
 //        query DB with limit "Number of rows to display", Offset firstRowOnScreen
 //        display each of the values in this "subset"

目前显示代码为:

    EditText editText = (EditText) findViewById(R.id.lookupFoodInfo);
    String message = editText.getText().toString();
    android.util.Log.i("FOOO", message);

    String where = "";
    if (message.trim() != "") {
        where = "WHERE Long_Desc LIKE '%"+message.trim()+"%'";
    }

    String sql = "  SELECT bt.Long_Desc " + 
                " FROM BIG_TABLE bt INNER JOIN OTHER_TABLE ot ON bt.id = ot.fk_id " +
                where +
                " ORDER BY ot.value, bt.long_desc ASC";


    Cursor c = sqdb.rawQuery(sql, null);
    if (c != null) {
        c.moveToFirst();
        while (c.isAfterLast() == false) 
        {
            String data = c.getString(c.getColumnIndex("Long_Desc"));
            TableRow row = new TableRow(getApplicationContext());
            row.setLayoutParams(new LayoutParams(
                    LayoutParams.WRAP_CONTENT));

            TextView b3=new TextView(this);
            b3.setText(data);
            b3.setTextColor(Color.BLUE);
            b3.setTextSize(25);
            row.addView(b3);
            table.addView(row);

            c.moveToNext();
        }
    }
    c.close();
    sqdb.close();
    myDbHelper.close();

iOS中非常相似的东西就像闪电一样运行。

4

2 回答 2

1

您正在寻找的是 aListView和 a CursorAdapter。ListView 的行一旦移出屏幕就会被回收,因此您只有 ~ n + 2(其中 n 是可见行数),而不是数据库中的每个项目一行。

http://developer.android.com/guide/topics/ui/layout/listview.html

于 2012-12-16T03:17:22.453 回答
1

你犯了一个很大的错误。您不能使用表格布局来加载行列表。当您来自 ios 背景时,您可能会这样做。您指的是 Android 中的 LIstview,它为您完成了一半的工作。

请参阅此链接。每件事都解释清楚

于 2012-12-16T03:18:33.287 回答