我有一个iPhone和一个安卓应用程序。在iPhone上,我使用NSFetchedResultsController来管理我的UITableView的数据,目前我有很多数据(几千行)。
在我的安卓应用程序中,我使用ORMLite并将数据存储在一个表中,但是当我获取数据时,我会将所有数据提取到一个数组中,并使用ArrayAdapters。是否有更有效的方法来做到这一点,如NSFetchedResultsController类型的对象?出于性能原因,我只想加载所需的对象,而不是所有对象。
在ORMLite中有办法做到这一点吗?我试着在文件里找到但到目前为止什么都没找到..。还有什么能帮上忙的吗?
发布于 2014-07-01 17:50:21
你可以用CursorAdapter.
见http://developer.android.com/reference/android/widget/CursorAdapter.html和http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html
或者您可以实现一个无休止的适配器。
延迟加载可能会在这里有所帮助。让我们假设您有10000个条目的数据。您可以显示其中的一个有限子集,比如在一个time.You上的90个条目,最初可以加载几个条目,比如30(1-30)。在滚动到末尾时,当加载的entries.As条目达到90 (在第三次加载时),您可以将当前数据集截断为31-120,而不是前面的1-90。
另外一种情况也是一样的,那就是向上滚动。
int offset=0;
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
final int MAX_SUBSET=90;
final int INTERVAL=30;
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount) {
//Load new data and update The adapter.
if(totalItemCount<=MAX_SUBSET){
loadData(0,totalItemCount+INTERVAL);
}
else{
offset+=INTERVAL;
loadData(offset,MAX_SUBSET);
}
}
else if(0==firstVisibleItem){
//Load old data
if(totalItemCount<=MAX_SUBSET){
loadData(0,totalItemCount+INTERVAL);
}
else{
offset-=INTERVAL;
loadData(offset,MAX_SUBSET);
}
}
});Ps:我错过了几次边界检查,但希望你能有个大致的想法。
https://stackoverflow.com/questions/24516100
复制相似问题