我在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
正如您所期望的那样。
答案 0 :(得分:1)
我相信你需要做类似invalidate
之类的东西,或者那些只是刷新适配器中数据的东西。
我认为这是。
myListView.getAdapter().notifyDataSetChanged();
如果这不起作用,可能是......
myListView.invalidate();