ich mehrere Fragen auf Stackoverflow gelesen haben dieses Problem und zurAufnahme und Lösungen adressieren, aber immer noch kann ich nicht aktualisieren Einzelteile. Durch Drücken eines Menüsymbols wird searchString() aufgerufen. Innerhalb dieser Methode möchte ich Recyclerview Element aktualisieren, die nicht funktioniert. Hier sind Teile meines Codes:Android RecyclerView Adapter notifyDataSetChanged funktioniert nicht
/* in my notation, pg is equivalent to page.*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_ebook_list, container, false);
mEbookRecyclerView = (RecyclerView) view.findViewById(R.id.ebook_recycler_view);
mLayoutManager = new LinearLayoutManager(getActivity());
mEbookRecyclerView.setLayoutManager(mLayoutManager);
updateUI();
return view;
}
@Override
public void onResume() {
super.onResume();
updateUI();
}
private void updateUI() {
if (mAdapter == null) {
EbookLab ebookLab = EbookLab.get(getActivity());
List<String> pgs = ebookLab.getPgs();
mAdapter = new EbookAdapter(pgs);
mEbookRecyclerView.setAdapter(mAdapter);
}
}
/* ******codes for preparation of menus which I have ignored *******/
private class EbookHolder extends RecyclerView.ViewHolder {
private String mPg;
public EbookHolder(LayoutInflater inflater, ViewGroup container) {
super(inflater.inflate(R.layout.list_item_ebook, container, false));
mListWebView = (WebView) itemView.findViewById(R.id.list_web_View);
mListWebView.getSettings().setLoadWithOverviewMode(true);
}
public void bindEbook(String pg) {
mPg = pg;
mListWebView.loadDataWithBaseURL("file:///android_asset/", mPg, "text/html", "UTF-8", null);
}
}
private class EbookAdapter extends RecyclerView.Adapter<EbookHolder> {
private List<String> mPgs;
public EbookAdapter(List<String> pgs) {
mPgs = pgs;
}
@Override
public EbookHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
return new EbookHolder(layoutInflater, parent);
}
@Override
public void onBindViewHolder(EbookHolder holder, int position) {
String pg = mPgs.get(position);
holder.bindEbook(pg);
}
@Override
public int getItemCount() {
return mPgs.size();
}
public void setPgs(List<String> pgs) {
mPgs.clear();
mPgs.addAll(pgs);
notifyDataSetChanged();
}
}
public void searchString(String qSrh) {
EbookLab ebookLab = EbookLab.get(getActivity());
List<String> pgs = ebookLab.getPgs();
List<String> tmppgs = new ArrayList<String>(pgs);
/** Some code for manipulation of tmppgs and updating recyclerview based on the tmppgs **/
mAdapter.setPgs(tmppgs);
}
Irgendwelche Hilfen werden geschätzt.
können Sie versuchen, rufen adapter.notifyDataSetChanged()? – Eenvincible
Ja, ich habe es vorher versucht und ist gescheitert. –