我正在做的是显示列表视图,并在列表移动到最后一个元素时重新加载其数据。 它工作正常,但问题是当它重新加载它回到列表中的顶部元素。我希望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
}
}
任何帮助 我该怎么办
先谢谢
答案 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);