在Android TableView中显示查询结果时如何调整性能?

时间:2012-12-16 02:59:13

标签: android ios sqlite tableview

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

当我在iPhone应用程序中构建这个相同的功能时,他们的tableview版本自动处理 JUST 屏幕上的行。这使得显示器很容易上班。

从我所看到的,似乎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中非常相似的东西就像闪电一样。

2 个答案:

答案 0 :(得分:1)

您要找的是ListViewCursorAdapter。 ListViews有一些行,一旦它们离开屏幕就会被回收,所以你只有~n + 2(其中n是可见行的数量)而不是数据库中每个项目的一行。

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

答案 1 :(得分:1)

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

请参阅此link。每件事都清楚地解释了