0

私は最初のAndroidアプリを作成しており、iOSの世界から来ています。スクロールしてテーブルビューに表示したいかなり大きなクエリ(〜100k +行)があります。

これとまったく同じ関数をiPhoneアプリで作成したとき、それらのバージョンのテーブルビューでは、画面に表示されていた行だけが自動的に処理されていました。これにより、ディスプレイが非常に簡単に機能するようになりました。

私が見ることができることから、アンドロイドテーブルビューは結果全体をロードしていて、大幅に遅くなっているようです。

何らかの形の「遅延読み込み」を可能にするAndroidTableviewクラスの組み込み機能はありますか、それともクエリにいくつかのハンドラーと制限を書き込む必要がありますか?

たとえば、擬似コード:

 // 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

あなたが探しているのはListViewとですCursorAdapter。ListViewには、画面から移動すると再利用される行があるため、データベース内のアイテムごとに1行ではなく、〜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 に答える