我已经创建了一个自定义列表视图,它看起来是Twitter的时间表,并包含帖子。以下函数从服务器获取帖子列表,解析它们并将它们添加到用于填充列表视图的列表中。ListView没有得到更新调用notifyDataSetChanged()
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();
通知的变化。但是,该列表视图不会更新。为了追踪目的,我在列表视图顶部添加了一个按钮, 再次调用populateTimeline(),然后在点击按钮时调用notifyDataSetChanged()。令人惊讶的是,这次在ListView中弹出所有帖子。
应该怎么做才能更新列表视图没有按钮点击?
它正在主线程中调用。 – primpap 2010-05-26 15:26:09
你如何在主线程上调用它? – 2010-08-30 22:37:33
你可以通过使用这里描述的Handler类来实现:http://www.vogella.de/articles/AndroidPerformance/article.html – 2011-10-06 16:25:57