因为在Android中错过了循环

时间:2012-10-23 11:33:51

标签: java android for-loop

我在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正如您所期望的那样。

1 个答案:

答案 0 :(得分:1)

我相信你需要做类似invalidate之类的东西,或者那些只是刷新适配器中数据的东西。

我认为这是。

myListView.getAdapter().notifyDataSetChanged();

如果这不起作用,可能是......

myListView.invalidate();