【发布时间】:2016-03-22 11:40:03
【问题描述】:
我正在使用 RecyclerView 并以十个为一组从 API 中获取对象。对于分页,我使用 EndlessRecyclerOnScrollListener 并遵循本教程 Endless RecyclerView.
我的问题:滚动程序必须添加进度条并在从服务器获取数据后将其删除。但就我而言,它不起作用。进度条仍在下载。如果滚动缓慢,它就会消失。如果滚动速度更快,进度条没有消失。
获取数据的方法
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(..., ...)的全部代码贴出来吗? -
@AmitRanjan 你可以在这个链接中看到它android-pratap.blogspot.com/2015/06/…
-
也许你的延迟是这里的问题。消除延迟或缩短延迟。
-
@xdevs23 会怎样?消除延迟?任何想法?我是android和java的新手。谢谢
标签: android android-recyclerview