我创建了一个自定义列表视图,其中包含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中会弹出所有帖子。
如果没有点击按钮更新列表视图应该怎么做?
答案 0 :(得分:1)
我正在使用Gson来解析Json,并且需要花费太长时间来解析json数组并填充列表,导致在列表中有任何更改之前调用adapter.notifyDataSetChanged。所以我将notifyDataSetChanged转移到一个函数,并在一个解决了问题的延迟(Thread.sleep())之后调用它。
答案 1 :(得分:0)
adapter.notifyDataSetChanged();应该在UI /主线程上调用