我正在编写我的第一个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中非常相似的东西就像闪电一样。
答案 0 :(得分:1)
您要找的是ListView
和CursorAdapter
。 ListViews有一些行,一旦它们离开屏幕就会被回收,所以你只有~n + 2(其中n是可见行的数量)而不是数据库中每个项目的一行。
http://developer.android.com/guide/topics/ui/layout/listview.html
答案 1 :(得分:1)
请参阅此link。每件事都清楚地解释了