添加新元素时如何刷新列表视图

时间:2014-08-12 11:00:58

标签: android listview

我正在做的是显示列表视图,并在列表移动到最后一个元素时重新加载其数据。 它工作正常,但问题是当它重新加载它回到列表中的顶部元素。我希望List保持在同一位置并在其下面添加新元素。

这就是我正在做的事情

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {
    if (firstVisibleItem + visibleItemCount == totalItemCount
            && totalItemCount != 0) {
        if (flag_loading == false) {
            flag_loading = true;
            toast("Last view");
            loadMorePost();
        }
    }

}

private void loadMorePost() {
    page_no = page_no + 1;
    String url = "api/post/index/page_no/" + page_no;
    syncManager.sendToServer(url, null, this);
}



        if (action.equals("index") && controller.equals("post")) {
            if (status) {
                //postItemsList.clear();
                JSONArray postArray = jsonObject.getJSONArray("post_list");
                if (postArray.length() <= 0) {
                    toast("No Post Available");
                } else {
                    for (int i = 0; i < postArray.length(); i++) {
                        JSONObject obj = postArray.getJSONObject(i);
                        ItemsAllPost data = new ItemsAllPost();
                        data.user_first_name = obj
                                .getString("User_first_name");
                        data.user_address = obj.getString("User_address");
                        data.user_post_count = obj
                                .getString("user_post_count");
                        data.description = obj
                                .getString("post_description");
                        data.category_id = obj.getString("category_id");
                        data.create_user_id = obj
                                .getString("create_user_id");
                        data.post_image = obj.getString("post_image");
                        data.user_ph_no = obj.getString("User_ph_no");
                        data.user_long = obj.getString("User_long");
                        data.date = obj.getString("date");
                        data.post_fav = obj.getString("post_fav");
                        data.amount = obj.getString("amount");
                        data.id = obj.getString("id");
                        data.category_title = obj
                                .getString("category_title");
                        data.time_period = obj.getString("time_period");
                        data.is_private = obj.getString("is_private");
                        data.fav_count = obj.getString("fav_count");
                        JSONArray imagesarry = obj
                                .getJSONArray("post_image");
                        data.imgList = new String[imagesarry.length()];
                        for (int j = 0; j < imagesarry.length(); j++) {
                            data.imgList[j] = imagesarry.getString(j);
                        }
                        data.view_count = obj.getString("view_count");
                        data.user_email = obj.getString("User_email");
                        data.user_lat = obj.getString("User_lat");
                        data.title = obj.getString("post_title");
                        postItemsList.add(data);
                    }
                    inflateList(postItemsList);
                }
            }
        }


private void inflateList(ArrayList<ItemsAllPost> postItemsList) {
    if (postItemsList.size() > 0) {
        adapter = new AllPostAdapter((BaseActivity) activity,
                postItemsList, userDataFrag);
        allpostsLV.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    } else {
        // do nothing
    }
}

任何帮助 我该怎么办

先谢谢

3 个答案:

答案 0 :(得分:1)

试试这个

在获取更新数据的地方添加此代码,并添加适配器:adapter.notifyDataSetChanged();

答案 1 :(得分:1)

使用一个List来存储您的数据:

private List<ItemsAllPost> datas;

第一次获取数据时,只启动适配器:

adapter = new AllPostAdapter((BaseActivity) activity,
            postItemsList, datas);

当您加载更多数据时,只需将所有额外数据添加到:datas

 datas.addAll(moredataList);

只需要致电:

 adapter.notifyDataSetChanged();

我无法看到声明 postItemsList 的位置,所以我猜你把它变成了:datas变量所以你只能调用:adapter.notifyDataSetChanged();但是不要重新启动你的适配器。

答案 2 :(得分:1)

删除这些行:

     private void inflateList(ArrayList<ItemsAllPost> postItemsList) {
    if (postItemsList.size() > 0) {
        adapter = new AllPostAdapter((BaseActivity) activity,
                postItemsList, userDataFrag);
        allpostsLV.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    } else {
        // do nothing
    }
}

并在

之后添加adapter.notifyDataSetChanged();
 postItemsList.add(data);