我相信這只是一個簡單的錯誤,但我無法解決它。 My RecyclerView.Adapter在AsyncTask(LoadAllPersonsFromDb)的幫助下從SQLite數據庫中加載其數據。響應由回調接口(ILoadPersonFromDb.onFindAll)處理。RecyclerView.Adapter notifyDataSetChanged不能用AsyncTask回調
這裏是適配器的代碼:
public class ListViewAdapter extends RecyclerView.Adapter<ListViewViewholder> implements LoadAllPersonsFromDb.ILoadPersonFromDb {
private int layout;
private List<Person> persons;
private Context context;
private AdapterDataSetListener adapterDataSetListener;
public ListViewAdapter(int layout, Context context,
AdapterDataSetListener adapterDataSetListener) {
this.layout = layout;
persons = new ArrayList<>();
this.context = context;
this.adapterDataSetListener = adapterDataSetListener;
new LoadAllPersonsFromDb(context, this).execute();
}
@Override
public ListViewViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
return new ListViewViewholder(view, context);
}
@Override
public void onBindViewHolder(ListViewViewholder holder, int position) {
holder.assignData(persons.get(position));
}
@Override
public int getItemCount() {
return persons.size();
}
@Override
public void onFindAll(List<Person> persons) {
Log.d("LISTVIEW", "Counted: " + persons.size() + " elements in db");
if (this.persons != null) {
this.persons.clear();
this.persons.addAll(persons);
} else {
this.persons = persons;
}
adapterDataSetListener.onChangeDataSet();
//notifyDataSetChanged();
}
public interface AdapterDataSetListener {
void onChangeDataSet();
}
}
正如你所看到的,我想不止一種方法來讓它運行。簡單的notifyDataSetChanged沒有做任何事情,所以我做了另一個接口,用於將UI信息委託給相關片段。下面的代碼文件,這個接口,在與片段實施:
@Override
public void onChangeDataSet() {
Log.d("Callback", "called");
listViewAdapter.notifyDataSetChanged();
/*
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
listViewAdapter.notifyDataSetChanged();
}
});
*/
}
在這裏,我也試圖把它放在MainUiThread但沒有任何工程。我只是無法看到我的問題在哪裏。希望你們中的任何人都能給我一個提示。
日誌工作,這是工作回調的證明。
預先感謝您。 PS:如果您需要更多的代碼,請告訴我,我會提供它。的