私は最初の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で非常によく似たものが稲妻のように動作します。