我正在使用RecyclerView并从API中以10批为单位获取对象。对于分页,我用EndlessRecyclerOnScrollListener并按照本教程Endless RecyclerView.
无尽的RecyclerView - ProgressBar只在慢速滚动时才消失
我的问题:在滚动PROGRAMM必须添加进度条和从服务器获取数据后,将其删除。但在我的情况下,它不起作用。 ProgressBar仍在下载。如果滚动速度慢,它就会失去活力。如果滚动更快进度栏不会消失。
该读取的数据
private void makeJsonObjectRequest(int startList,int endList,final JsonObjectListener listener) {
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
i = startLsit;
while(i < endList) {
try {
JSONObject obj = response.getJSONObject(i);
Movie movie = new Movie();
/***** TONS OF CODE *****/
movieList.add(movie);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
i++;
lastNumber = i;
}
mAdapter.notifyDataSetChanged();
listener.onDone(lastNumber);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(movieReq);
}
我在片段使用方法上面的方法:
makeJsonObjectRequest(0, 9, new JsonObjectListener() {
@Override
public void onDone(int lastNumberI) {
lastNumber = lastNumberI;
}
@Override
public void onError(String error) {
}
}); }
mAdapter = new RVAdapter(getContext(),movieList,this,mRecyclerView);
mAdapter.setClickListener(this);
mRecyclerView.setAdapter(mAdapter);
mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
movieList.add(null);
mAdapter.notifyItemInserted(movieList.size()-1);
handler.postDelayed(new Runnable() {
@Override
public void run() {
// remove progress item
movieList.remove(movieList.size()-1);
mAdapter.notifyItemRemoved(movieList.size());
//add items one by one
int start = lastNumber;
int end = start + 9;
makeJsonObjectRequest(start, end, new JsonObjectListener() {
@Override
public void onDone(int lastNumberI) {
lastNumber = lastNumberI;
}
@Override
public void onError(String error) {
}
});
mAdapter.setLoaded();
}
}, 2000);
}
});
我的适配器这样Endless RecyclerView
我注意到,当我快速滚动下面的代码重复
mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
movieList.add(null);
mAdapter.notifyItemInserted(movieList.size()-1);
handler.postDelayed(new Runnable() {
@Override
public void run() {
// remove progress item
movieList.remove(movieList.size()-1);
mAdapter.notifyItemRemoved(movieList.size());
//add items one by one
int start = lastNumber;
int end = start + 9;
makeJsonObjectRequest(start, end, new JsonObjectListener() {
@Override
public void onDone(int lastNumberI) {
lastNumber = lastNumberI;
}
@Override
public void onError(String error) {
}
});
mAdapter.setLoaded();
}
}, 2000);
}
});
其中是你的progressDilog在这段代码中? –
你可以发布'handler.postDelayed(...,...)'的整个代码吗? – xdevs23
@AmitRanjan你可以在这个链接看到它http://android-pratap.blogspot.com/2015/06/endless-recyclerview-with-progress-bar.html –