【发布时间】:2013-11-22 10:18:06
【问题描述】:
我有一个从 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 但它不起作用。我现在不知道这是不是最好的方法,所以任何想法都会受到赞赏!
【问题讨论】:
-
你可以使用延迟加载技术来做到这一点。
-
谢谢,我会调查一下,没听说过这个词,因为我对 android 还很陌生
-
您可以在后台线程中运行数据库查询,并在获取并准备好结果时更新列表视图。在此之前,您可以在 UI 中显示
loading..,例如 lh4.googleusercontent.com/_ODdyLCCXPpQ/TZwr-_i8BHI/AAAAAAAAw08/…AsyncTask会有所帮助。
标签: android sqlite listview android-listview onscroll