これは私のコードです。ここでは最初に0個の要素を持つoriginalProductListという値にアダプタを設定しています。後、私は1595(データ数)このadapter.notifyDataSetChanged()を呼び出すadapter.notifyDataSetChanged()がアンドロイドで動作していません
private List<ParentListItem> originalProductList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.crime_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyAdapter(this, originalProductList);
adapter.onRestoreInstanceState(savedInstanceState);
recyclerView.setAdapter(adapter);
getProducts();
}
private void getProducts() {
if (Utility.getParentListItems().size() == 0) {
final ProgressDialog loading = new ProgressDialog(ActivityProductList.this, R.style.MyTheme);
loading.setCancelable(true);
loading.show();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASERESTURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RestInterface service = retrofit.create(RestInterface.class);
Call<List<Product>> call = service.getProducts();
call.enqueue(new Callback<List<Product>>() {
@Override
public void onResponse(Response<List<Product>> response, Retrofit retrofit) {
List<Product> products = response.body();
loading.dismiss();
//logic to parse data
Utility.setParentListItems(parentListItems);
originalProductList.clear();
originalProductList.addAll(Utility.getParentListItems());
Utility.displayToast("in fetch: " + originalProductList.size()); // this prints 1595
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Throwable t) {
//Utility.displaySnackBar(coordinatorLayout, "INTERNET CONNECTION LOST");
Utility.displayToast("some error");
loading.dismiss();
}
});
}
}
を印刷し、このフィールドを更新しています。 UIを更新するのではなく、エラーもありません。
ロジックに問題がありますか?これを修正するには?
は、問題は、あなただけではなく、アダプター内のリストを変更している、です。必要なことは、アダプタ内で新しいリストをパラメータ(setOriginalProductList)として渡し、このメソッド内でnotifyDatasetChaged()を呼び出すことです。 – Leonardo
応答はバックグラウンドスレッド上にある可能性があります。あなたの 'notifyDataSetChanged()'を 'runOnUiThread'で囲んでみてください。 – dharms