Dude
Dude

Reputation: 173

How do Refresh List View when adding new elements

What i am doing is showing a list view and reload its data when list is Moved to last Element. Its working fine but the problem is when it reloads it went back to the top element in list. I want List to be stayed at same position and append new Elements below it.

Here is what i am doing

@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
    }
}

Any Help What should i do

Thanks in Advance

Upvotes: 0

Views: 127

Answers (3)

mmlooloo
mmlooloo

Reputation: 18977

remove these lines :

     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
    }
}

and add adapter.notifyDataSetChanged(); after

 postItemsList.add(data);

Upvotes: 1

Linh Nguyen
Linh Nguyen

Reputation: 1264

using one List to store your data :

private List<ItemsAllPost> datas;

init your adapter only one when the first time you get data :

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

when you load more data finish just add all extra data to : datas

 datas.addAll(moredataList);

and only need to call :

 adapter.notifyDataSetChanged();

I cant see where postItemsList is declared so I guess you made it like the : datas variable so you can only call : adapter.notifyDataSetChanged(); but don't re-init your adapter.

Upvotes: 1

Deep Shah
Deep Shah

Reputation: 1364

try this

add this code where you get your updated data and also adapter : adapter.notifyDataSetChanged();

Upvotes: 1

Related Questions