この問題を解決するstackoverflowに関するいくつかの質問を読んだが、問題を解決できなかった。 recyclerviewはwebviewを表示します。画像の下(RecyclerViewアダプタがスクロール中に間違った値をとる
を私はスクロールダウンし、再び最初の位置までスクロールしたときに、間違った値がWebViewの中に表示されます。私の問題は、アダプタは、最初に、(画像の下に)正しい値をロードすることです):
私はこの問題はWebViewのに以前に開始した負荷に由来してもよいと思うが、私はこの振る舞いの取り扱いについてどんな考えを持っていません。ここに私のコードの関連部分があります:
/* 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/", "Stack Over Flow " + String.valueOf(glbPos), "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);
glbPos = position;//A global variable for position
holder.bindEbook(pg);
}
@Override
public int getItemCount() {
return mPgs.size();
}
public void setPgs(List<String> pgs) {
mPgs.clear();
mPgs.addAll(pgs);
notifyDataSetChanged();
}
}
私は助けていただきありがとうございます。
更新:私のコードでは、mListWebViewをグローバル変数として定義しました。ただし、private class EbookHolder extends RecyclerView.ViewHolder
の内部に定義する必要があります。 は、それから私はbindEbook(String pg)
方法を取り外し、直接public void onBindViewHolder(EbookHolder holder, int position)
内部mListWevView
を更新:
holder.mListWebView.loadDataWithBaseURL("file:///android_asset/", "Stack Over Flow " + String.valueOf(glbPos), "text/html", "UTF-8", null);
私の質問>>はbindEbook(String pg)
を呼び出すとrecyclerviewをスクロールするか、それがAndroidのアーキテクチャに関連しているに比べて長い時間がかかるん?
あなたviewholderはwar_Hero @ –
間違っている:あなたは私の詳細を与えることができますか? –
あなたのアダプターのポストを説明してください、ただJISTと同じです。ビューアの中のビューは、位置を維持するために使用されています。 –