ListView没有获得有关调用notifyDataSetChanged()的更新

时间:2010-05-26 14:55:35

标签: android listview

我创建了一个自定义列表视图,其中包含Twitter时间轴并包含帖子。以下函数从服务器获取帖子列表,解析它们并将它们添加到用于填充列表视图的列表中。

public void populateTimeline(){
        Thread populate = new Thread(){
            public void run(){
                Looper.prepare();
                InputStream data = getData(serviceURL);  //gets a jsonarray of posts from server  $ post_list
                if(data!= null)
                    try {

                            String jsonString = responsetoString(data);
                            Log.d(TAG, jsonString);
                            PostList list = getPostList(jsonString);
                            List <PostContainer> post_list = list.getPostContainterList(); 
                            PostContainer pc;
                            for (int i = 0; i < post_list.size(); i++) {            
                                pc = post_list.get(i);
                                mObjectList.add(pc.getPost()); //Adding each post to the list
                                Log.d(TAG, pc.post.username);
                                Log.d(TAG, pc.post.message);
                            }

                    } catch (Exception e) {
                        Log.d(TAG, "Exception" + e.getMessage());
                        e.printStackTrace();
                    }
                Looper.loop();              
            }

        };
        populate.start();
    }

调用此函数后,通过调用

向列表适配器通知数据集的更改
adapter.notifyDataSetChanged();

在主线程中。但是listview没有更新。为了追踪目的,我在列表视图顶部添加了一个按钮 再次调用populateTimeline(),然后在单击按钮时调用notifyDataSetChanged()。令人惊讶的是,这次ListView中会弹出所有帖子。

如果没有点击按钮更新列表视图应该怎么做?

2 个答案:

答案 0 :(得分:1)

我正在使用Gson来解析Json,并且需要花费太长时间来解析json数组并填充列表,导致在列表中有任何更改之前调用adapter.notifyDataSetChanged。所以我将notifyDataSetChanged转移到一个函数,并在一个解决了问题的延迟(Thread.sleep())之后调用它。

答案 1 :(得分:0)

adapter.notifyDataSetChanged();应该在UI /主线程上调用