我在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
正是您所期望的。 最佳答案
我相信您需要执行类似invalidate
的操作或类似的操作,这些操作几乎只是刷新适配器中的数据。
我认为这是。myListView.getAdapter().notifyDataSetChanged();
如果那不起作用,那可能是...myListView.invalidate();