我正在尝试跟踪boolean
变量hasMoreData
与EndlessAdapter
的内容,以及为什么似乎过早转向false
。
让我从头开始贯穿所发生的事情。 注意:我使用的是task
和setRunInBackground(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? (直到课程结束)
答案 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
设置为false
或items
,具体取决于hasMoreData
集合是否为空,因此它基本上只会加载一个额外数据,然后调用它退出。
但这是示例应用的行为。我甚至没有写这个类的大部分内容 - 它是一个补丁,增加了对你自己的数据获取任务的支持。 不要将示例代码视为样本。
因此,你需要将你的 hasMoreData
值设置为你的应用程序逻辑为任何角色服务的意义<你> 决定使用hasMoreData
。 如果 true
在您的代码中与示例中的角色相同,请将其保留为false
,直到您确定自己没有数据为止,然后将其设置为{{ 1}}。