1

我在 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的子类的一个实例,方法如下所示:AdapteraddItem(Item)

public synchronized void addItem(Item item) {
    mItems.add(item);
    notifyDataSetChanged();
}

mItems正是您所期望的。

4

1 回答 1

1

我相信你需要做一些类似invalidate或类似的事情,这几乎只是刷新适配器中的数据。

我认为是这个。

myListView.getAdapter().notifyDataSetChanged();

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

myListView.invalidate();

于 2012-10-23T11:37:26.740 回答