我在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();

09-05 03:55
查看更多