0

我试图跟踪boolean变量的情况,hasMoreData以及EndlessAdapter为什么似乎过早地转向false

让我从头开始运行会发生什么。 注意:我使用的是tasksetRunInBackground(false);

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

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

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

在设置适配器后出现的第一件事是方法cacheInBackground(),我的profileList大小为零,因此它设置为 0,就像int startPoint调用我的AsyncTaskwherehasMoreData设置为时一样true。同时,在这个(缓存)方法中,hasMoreData 返回true. 不知道为什么?因为列表的大小为零?还是因为它仍然与默认值相关联true

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

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

public void onItemsReady(ArrayList<ProfileReview> data) {
     profileList.addAll(data);
     endlessAdapter.onDataReady();
     hasMoreData = profileList.isEmpty();  \\ Log.'d this out
}

我的问题:我的列表从 10 个项目开始,用户滚动,它又抓取了 10 个。然后在总共 20 个项目后停止(或何时停止hasMoreData == false。)但我还有更多项目要从中提取。我该如何保持hasMoreData == true?这是什么触发因素?显然触发器是列表大小(我认为?),为什么列表大小一旦开始抓取数据就会为 0?(直到课程结束)

4

1 回答 1

2

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

EndlessAdapter绝对设计为从非空适配器开始。事实上,它的设计假设用户必须滚动才能加载更多数据。您当前方法中的行为未指定,我不推荐这种方法。请加载一些数据,然后在您的第一批数据准备好后填充列表。

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

由于EndlessAdapter没有hasMoreData方法。对源代码EndlessAdapter的搜索没有找到任何名为hasMoreData. 哎呀,“更多”这个词出现的唯一地方是在评论中。

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

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

但这是示例应用程序的行为。我什至没有编写这个类的大部分内容——它是作为一个补丁提供的,增加了对你自己的数据获取任务的支持。不要认为示例代码仅仅是一个示例

因此,需要将您的值设置为对 您的应用程序逻辑hasMoreData有意义的任何值,以服务于决定使用的任何角色。如果您的代码中的角色与示例中的角色相同,请保留它,直到您确定数据不足,然后设置它。hasMoreData hasMoreDatatruefalse

于 2013-04-23T20:05:29.080 回答