【发布时间】:2015-08-12 15:20:40
【问题描述】:
在我的列表中,我想实现无尽的列表。现在当我向下滚动并接收到列表的第五项时,新数据加载但数据未添加到列表末尾,它清除列表的所有项目然后显示。
如何将新项目附加到列表末尾。 请注意,我正在使用 adapter.notifyDataSetChanged();但仍然不适合我。
这里是我的 EndlessScrollListener 类:
public class EndlessScrollListener implements AbsListView.OnScrollListener {
private int visibleThreshold = 5;
// private int currentPage = 0;
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE) {
if (myList.getLastVisiblePosition() >= myList.getCount() - visibleThreshold) {
cpage++;
new sendpage(cpage).execute();
if (isOnline()) {
requestData("http://192.168.1.3/android_login_api/include/get_post.php");
} else {
Toast.makeText(MainActivity.this, "Network isn't available", Toast.LENGTH_LONG).show();
}
updateDisplay();
adapter.notifyDataSetChanged();
}
}
}
还有我的 updateDisplay 函数:
protected void updateDisplay() {
adapter = new MyCustommAdapter(MainActivity.this, R.layout.list_item, postList);
// adapter = new MyCustommAdapter(MainActivity.this, R.layout.list_item, postList);
adapter.notifyDataSetChanged();
myList.setAdapter(adapter);
}
我的 requestData() 函数:
private void requestData(String uri) {
swipeRefreshLayout.setRefreshing(true);
StringRequest request = new StringRequest(uri,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
postList = PostJSONParser.parseFeed(response);
updateDisplay();
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError ex) {
Toast.makeText(MainActivity.this, ex.getMessage(), Toast.LENGTH_LONG).show();
swipeRefreshLayout.setRefreshing(false);
}
});
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(request);
}
PostJSONParser 类:
public class PostJSONParser {
public static List<Post> parseFeed(String content){
JSONArray ar = null;
try {
ar = new JSONArray(content);
List<Post> postList = new ArrayList<Post>();
for (int j =0; j<ar.length(); j++){
JSONObject obj = ar.getJSONObject(j);
Post post = new Post();
post.setId(obj.getInt("id"));
post.setTitle(obj.getString("title"));
post.setContent(obj.getString("content"));
post.setCreated_at(obj.getString("created_at"));
post.setUrl_image(obj.getString("url_image"));
postList.add(post);
}
return postList;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
}
注意 requestData() 函数使用 volley 获取新项目。
知道如何实现吗?
【问题讨论】:
-
在您的 requestData(...) 函数中,您是否正在更新 postList 变量?因为我认为您正在用新数据覆盖 (ArrayList) postList 而不仅仅是添加 postList.add(newItem);
-
我添加了 requestData() 函数。
-
这是问题 postList = PostJSONParser.parseFeed(response);这一行正在用新数据覆盖这个变量,所以你以前的数据会丢失
-
我更新了答案你可以试试新的