我使用的是Retrofit框架,由于我使用了Retrofit的异步用法,故在从网络获取到数据之后需要调用adapter.notifyDataSetChanged()方法更新recyclerView的数据,但是这里很容易掉坑:recyclerView中的数据集productList是不一样的(至于为什么不一样,我也不知道……),如图:
知道了问题症结,就可以对症下药了,在适配器中新建一个刷新数据的方法
public void updateData(List<Product> list) {// 更新数据方法
productList.clear();
productList.addAll(list);
getProductRcvItemList();
notifyDataSetChanged();
}
// 从网络中获取商品的信息
public void getProductsInfoFromNet(String keyword, Integer categroryId, int pageNum, int PageSize, String orderBy) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RequestInterface.baseProductPath)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface.getProductsList2 requestGetProductsList = retrofit.create(RequestInterface.getProductsList2.class);
Call<ServerResponse<MyPageInfo<Product>>> call = requestGetProductsList.getProducts(keyword, categroryId, pageNum, PageSize, orderBy);
call.enqueue(new Callback<ServerResponse<MyPageInfo<Product>>>() {
@Override
public void onResponse(Call<ServerResponse<MyPageInfo<Product>>> call, Response<ServerResponse<MyPageInfo<Product>>> response) {
if (response.body() == null) {
new MainActivity().toastShort("网络异常,请检查网络配置");
return;
} else {
MyPageInfo<Product> myPageInfo = response.body().getData();// 获取页面信息
List<Product> productList = myPageInfo.getList();// 获取页面信息中的商品信息
**adapter.updateData(productList);// 更新数据**
}
}
@Override
public void onFailure(Call<ServerResponse<MyPageInfo<Product>>> call, Throwable t) {
new MainActivity().log("onFailure");
}
});
}
将list先clear掉,然后重新添加,ok,大功告成!
希望可以帮助到入坑的童鞋