SQLite データベースから取り込まれた ListView があります。データベースは 300,000 行以上あり、リストビューはさまざまなもの (名前、姓、年齢、その他の一般的なデータベースのもの) から検索した後に生成されます。
検索結果が小さい場合は問題なく動作しますが、検索結果が 2,000 件を超えると、アプリがフリーズして停止します。
私がしたいことは、データベースから 100 件の結果を返すことです。次に、リストの一番下までスクロールすると、カーソルに戻り、別の 100 件をロードします。動的リストは機能していますが、まだ検索しているため、フリーズします。 1000 件以上の結果が表示され、100 件の結果のみが表示されます。これはいくつかの疑似コードです (リストビューは 500 行以上あるため、検索対象に応じて大量の if else ステートメントがあります)
public class example extends Activity implements OnScrollListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.showlist);
//It opens database here
ListView list = (ListView) findViewById(R.id.listView1);
if(nameOnly is searched){
//adds data to list with array adapter here
//return 100 results and put it in a list
}else if(name and surname is searched){
//adds data to list with array adapter here
//return 100 results and put it in a list
}else if (surname only searced){
//adds data to list with array adapter here
//return 100 results and put it in a list
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
boolean load = firstVisibleItem+visibleItemCount>=totalItemCount;
if(load){
//This is where i want to set it to return
//the next 100 and add it to the list from the if else statements
}
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
}
}
そこで、OnScroll で再度カーソルを合わせ、SQLite カーソルで OFFSET を使用してみましたが、うまくいきませんでした。これが最善の方法であるかどうかはわかりませんので、アイデアをいただければ幸いです。