我正在使用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 –