Reputation: 173
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
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
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
Reputation: 1364
try this
add this code where you get your updated data and also adapter : adapter.notifyDataSetChanged();
Upvotes: 1