了解EndlessAdapter中cacheInBackground()的返回值

时间:2013-04-23 19:40:04

标签: android android-asynctask commonsware-cwac

我正在尝试跟踪boolean变量hasMoreDataEndlessAdapter的内容,以及为什么似乎过早转向false

让我从头开始贯穿所发生的事情。 注意:我使用的是tasksetRunInBackground(false);

我开始设置列表并设置适配器:

profileList = new ArrayList<ProfileReview>();
endlessAdapter = new EndlessProfileAdapter(getActivity(), profileList);
endlessAdapter.setRunInBackground(false);
listView.setAdapter(endlessAdapter);

旁注:不确定这是否正确,但似乎我使用空适配器设置列表。

设置适配器后出现的第一件事是方法cacheInBackground(),其中profileList大小为零,因此它将0设置为{{1}在调用我的int startPoint时,AsyncTask设置为hasMoreData。同时,在此(缓存)方法中,true返回hasMoreData不确定为什么?因为列表大小为零?或者因为它仍然与默认值true相关联?

在任务中,它抓住前10个项目。

然后当用户滚动时,true开始旋转。接下来显示10个。 thobber告诉我Log.d现在为10,因此profileList.size()为假。

hasMoreData

我的问题:我的列表以10个项目开始,用户滚动,它还有10个项目。然后在总共20个项目之后停止(或者在public void onItemsReady(ArrayList<ProfileReview> data) { profileList.addAll(data); endlessAdapter.onDataReady(); hasMoreData = profileList.isEmpty(); \\ Log.'d this out } 时停止。)但我还有更多的项目可供选择。如何保留hasMoreData == false?这是什么触发器?显然,触发器是列表大小(我认为?),为什么一旦开始抓取数据,列表大小就会为0? (直到课程结束)

1 个答案:

答案 0 :(得分:2)

  

不确定这是否正确,但似乎我使用空适配器设置列表。

EndlessAdapter绝对是以非空适配器开头的。实际上,它的设计假设用户必须滚动才能使其加载更多数据。您当前方法中的行为未指定,我不建议采用这种方法。请加载一些数据,然后在第一批数据准备就绪后填充列表。

  

同时,在此(缓存)方法中,hasMoreData返回true。不知道为什么?因为列表大小为零?或者因为它仍然与默认值true相关联?

由于EndlessAdapter没有hasMoreData方法。搜索the source code to EndlessAdapter不会显示任何名为hasMoreData的内容。哎呀,“更多”这个词的唯一出现在评论中。

示例应用的值为hasMoreData。由于您没有使用此示例应用程序,我无法帮助您在自己的代码中随机类的随机数据成员。

在示例应用中,在EndlessAdapterCustomTaskFragment中,我使用名为hasMoreData的数据成员。这是boolean值,旨在从cacheInBackground()返回。 cacheInBackground()的责任是,如果我们应该继续加载数据(在刚加载的当前批次之后),则返回true,否则false。对于此示例应用,hasMoreData的调用填充了onItemsReady()onPostExecute()本身由AsyncTask模拟加载某些数据的hasMoreData触发。 true设置为falseitems,具体取决于hasMoreData集合是否为空,因此它基本上只会加载一个额外数据,然后调用它退出。

但这是示例应用的行为。我甚至没有这个类的大部分内容 - 它是一个补丁,增加了对你自己的数据获取任务的支持。 不要将示例代码视为样本

因此,需要将你的 hasMoreData值设置为你的应用程序逻辑为任何角色服务的意义<你> 决定使用hasMoreData如果 true在您的代码中与示例中的角色相同,请将其保留为false,直到您确定自己没有数据为止,然后将其设置为{{ 1}}。