最近用到listview显示从服务器拉取回来的json数据,主要是图片和文字资源。
Listview在加载完数据后,当我们需要ListView进行刷新的时候,我们需要调用Adapter.notifyDataSetChanged()来让界面刷新。
在程序中我也使用了这个方法,但是依然没有加载后立即得到想要的效果。核心代码如下:
<span style="font-family:Microsoft YaHei;"> HotTopicBean hotTopicBean;
for (int i = 0; i < jsonArray.size(); i++) {
hotTopicBean = new HotTopicBean();
jsonObject = jsonArray.getJSONObject(i);
hotTopicBean.setPostId(jsonObject.getLong("postId")); //帖子ID
hotTopicBean.setUserimgUrl(jsonObject.getString("userPic"));
hotTopicBean.setName(jsonObject.getString("username")); //icon地址
String date = NetworkUtils.timeStamp2Date(jsonObject.getLong("updateTime").toString(), "yyyy-MM-dd HH:mm:ss");
Log.i("date:", date);
hotTopicBean.setTime(date);
hotTopicBean.setHottitle(jsonObject.getString("postTitle"));
hotTopicBean.setContent(jsonObject.getString("postContent"));
hotTopicBean.setFabulousnum(jsonObject.getInteger("likeCount"));
hotTopicBean.setCommentnum(jsonObject.getInteger("commentCount"));
Log.i("hottopicData:", hotTopicBean.getContent() + hotTopicBean.getUserimgUrl() + " 点赞数:" + hotTopicBean.getFabulousnum() + "更新时间" + hotTopicBean.getTime());
hotTopicBeansList.add(hotTopicBean);
}</span>
这段代码在
getHotTopicDataByVolley()方法中
<span style="font-family:Microsoft YaHei;font-size:14px;"> class SocketAsyncTask extends AsyncTask<String, Void, List<HotTopicBean>> {
@Override
protected List<HotTopicBean> doInBackground(String... params) {
// return getJsonData(params[0]); 原版本- 使用的伟哥的数据
return getHotTopicDataByVolley(params[0], hotTopicBeansList); //现版本,使用伟槟的数据
}
@Override
protected void onPostExecute(List<HotTopicBean> result) {
super.onPostExecute(result);
// onPostExecute()里面仅仅只负责通知数据改变,不要这里加入setAdapter
// hAdapter.notifyDataSetChanged();
}
}</span>
之前Adapter.notifyDataSetChanged()我是卸载onPostExcute()里面。
后来我把它提到在数据加载完就立刻通知系统数据已经更新
<span style="font-family:Microsoft YaHei;font-size:14px;">for (int i = 0; i < jsonArray.size(); i++) {
hotTopicBean = new HotTopicBean();
jsonObject = jsonArray.getJSONObject(i);
hotTopicBean.setPostId(jsonObject.getLong("postId")); //帖子ID
hotTopicBean.setUserimgUrl(jsonObject.getString("userPic"));
hotTopicBean.setName(jsonObject.getString("username")); //icon地址
String date = NetworkUtils.timeStamp2Date(jsonObject.getLong("updateTime").toString(), "yyyy-MM-dd HH:mm:ss");
Log.i("date:", date);
hotTopicBean.setTime(date);
hotTopicBean.setHottitle(jsonObject.getString("postTitle"));
hotTopicBean.setContent(jsonObject.getString("postContent"));
hotTopicBean.setFabulousnum(jsonObject.getInteger("likeCount"));
hotTopicBean.setCommentnum(jsonObject.getInteger("commentCount"));
Log.i("hottopicData:", hotTopicBean.getContent() + hotTopicBean.getUserimgUrl() + " 点赞数:" + hotTopicBean.getFabulousnum() + "更新时间" + hotTopicBean.getTime());
hotTopicBeansList.add(hotTopicBean);
}</span>
<pre name="code" class="java"><span style="font-family:Microsoft YaHei;font-size:14px;">hAdapter.notifyDataSetChanged(); </span><pre name="code" class="java"><span style="font-family:Microsoft YaHei;font-size:14px;">即在getHotTopicDataByVolley()方法内部通知系统数据已经更新了,问题得到解决。</span>