gpt4 book ai didi

Android NSFetchedResultsController

转载 作者:太空狗 更新时间:2023-10-29 14:13:47 25 4
gpt4 key购买 nike

我有一个 iPhone 和一个 Android 应用程序。在 iPhone 上,我使用 NSFetchedResultsController 来管理我的 UITableView 的数据。目前我有很多数据(几千行)。

在我的 Android 应用程序中,我使用 ORMLite 并将数据存储到一个表中,但是当我获取时,我将所有数据提取到一个数组中并使用 数组适配器。是否有更有效的方法来执行此操作,例如 NSFetchedResultsController 类型的对象?出于性能原因,我只想加载所需的对象,而不是所有对象。

有没有办法在 ORMLite 中做到这一点?我试图在文档中查找,但到目前为止一无所获...还有什么我遗漏的可以在这里提供帮助吗?

最佳答案

您可以使用CursorAdapter

参见 http://developer.android.com/reference/android/widget/CursorAdapter.htmlhttp://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

或者你可以实现一个 Endless Adapter

延迟加载 在这里可能会有所帮助。假设您有 10000 个条目的数据。您可以一次显示这个的有限子集,比如 90 个条目。您最初可以加载几个条目,比如 30(1-30)。滚动到末尾时,您将再加载 30 个条目。一旦加载的条目数达到 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:我漏掉了一些边界检查,但希望您能了解总体思路。

关于Android NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com