我在 Android 中有一个活动,它获取 Web 服务的结果并将其放入适配器以显示项目列表。我为此调用创建了一个侦听器接口,OnLoadCompleteListener
并且我的此活动的侦听器看起来像
mListener = new OnLoadCompleteListener() {
@Override
public void onPostExecute(RootWebService service) {
if(service instanceof WebService) {
//gets the number of items
int total = ((WebService) service).getCount();
for(int i=0; i<total; ++i) {
//Log.d("ITEM", "inserting " + i);
Item item = ((WebService) service).get(i);
//our adapter class automatically receives items
mAdapter.addItem(item);
}
}
}
};
现在这是奇怪的一点:监听器被击中,total
被设置为 12(我要求的项目数),然后 for 循环被完全绕过。适配器仍然是空的,屏幕几乎什么也没有显示。
但是,如果注释掉的Log.d(...)
调用被激活,则循环工作。
为什么?回调正在从 UI 线程运行,该getCount()
方法正在返回正确的值,并且此适配器以前工作过。到底发生了什么?
顺便说一句,是我为此目的编写mAdapter
的子类的一个实例,方法如下所示:Adapter
addItem(Item)
public synchronized void addItem(Item item) {
mItems.add(item);
notifyDataSetChanged();
}
mItems
正是您所期望的。