我已经实现了一个listview,其中数据通过asynctask加载,要加载更多数据,我使用了这个代码here(完全复制粘贴)
主要活动
class load_data extends AsyncTask<Integer, Void, Void>{
// This asynctask takes in a page number as argument and depending on that page number
// data is loaded and stored in various String[] arrays and their length is extended as new items are loaded
protected void onPostExecute(Void result) {
if(adapter == null){
adapter = new Listadapter(Main.this,String[],String[],String[]);
list.setAdapter(adapter);
}
else if(adapter != null){
adapter.notifyDataSetChanged();
}
}
}
此任务称为new load_data().execute(1);
在此代码之后,我从上面的链接加载了更多数据片段 在我的情况下,一切正常工作没有语法错误,并且在重新获得给定阈值(20)之后加载数据,但是没有显示新数据。如何通知适配器已添加更多数据或数据已更改 谢谢!
编辑:LOADMORE CLASS
class EndlessScrollListener implements OnScrollListener {
private int visibleThreshold = 5;
private int currentPage = 1;
private int previousTotal = 0;
private boolean loading = true;
public EndlessScrollListener() {
}
public EndlessScrollListener(int visibleThreshold) {
this.visibleThreshold = visibleThreshold;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
currentPage++;
}
}
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
// I load the next page of gigs using a background task,
// but you can call any function here.
new load_data().execute(currentPage);
adapter.notifyDataSetChanged();
loading = true;
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}
list.setOnScrollListener(new EndlessScrollListener(20)); // 20 being the threshold
答案 0 :(得分:2)
最后!对于那些遇到同样问题的人,我有解决方案。
我注意到如果您使用String []数组来存储显示在listview行中的数据,adapter.notifyDataSetChanged();
不起作用。
相反,如果您使用List<String> list = new ArrayList<String>();
并将数据存储在
列表视图将使用新数据进行更新:)
答案 1 :(得分:1)
如果您之前的代码有任何问题,可以查看此github project。
否则,如果您要加载分页等数据,可以尝试this example和this one