Androidが新機能です。私は現在、書籍のリストが表示されているリストビュー画面を持つアプリケーションを構築しようとしています。各アイテムにはURLからダウンロードしたイメージがあり、POJOオブジェクトに設定された値に基づいてイメージリソースの2つのアイコンが設定されます。Android Recyclerのアイテムシーケンスの問題
マイアダプタのコードは以下の通りです:
Context context = view.getContext();
view.setLayoutManager(new LinearLayoutManager(context));
view.setAdapter(new MySearchBooksItemRecyclerViewAdapter(SearchBooks.ITEMS, mListener, getActivity()));
public void onBindViewHolder(final ViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: binding variables of object: " + position);
Log.d(TAG, "onBindViewHolder: holder value: " + holder.mItem);
Log.d(TAG, "onBindViewHolder: holder value: " + holder.mTitle);
Log.d(TAG, "onBindViewHolder: holder value: " + holder.mISBN);
holder.mItem = mValues.get(position);
holder.mTitle.setText(mValues.get(position).getTitle());
holder.mTitle.setTag(mValues.get(position).getId());
holder.mISBN.setText(mValues.get(position).getIsbn());
holder.mDesc.setText(mValues.get(position).getDesc());
holder.mView.setOnClickListener(new ClickListItem());
getImages(holder.mBookImage, mValues.get(position).getImage());
if (bookList.get(mValues.get(position).getId()) != null) {
holder.mIsFav.setImageResource(bookList.get(mValues.get(position).getId()).isBookmarked() ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_border_white_24dp);
holder.mIsDownloaded.setImageResource(new File(bookList.get(mValues.get(position).getId()).getSavedBookName()).exists() ? R.drawable.ic_offline_pin_white_24dp : R.drawable.ic_get_app_white_24dp);
}
Log.d(TAG, "onBindViewHolder: variables bound: " + mValues.get(position));
}
@Override
public int getItemCount() {
Log.d(TAG, "getItemCount: item count: " + mValues.size());
return mValues.size();
}
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/darker_gray"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="5"
android:background="@color/background_material_dark"
android:orientation="vertical">
<ImageView
android:id="@+id/bookImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="100dp"
android:layout_weight="2"
android:src="@drawable/icon_img_tu" />
<LinearLayout
android:layout_weight="1"
android:minHeight="40dp"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/is_fav_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@drawable/ic_favorite_border_white_24dp" />
<ImageView
android:id="@+id/is_downloaded_image"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_material_dark"
android:src="@drawable/ic_get_app_white_24dp" />
</LinearLayout>
</LinearLayout>
私は、画面をスクロールしたときに今、問題が来ます。最初の負荷でアイコンの値と画像が完全に読み込まれます。しかし、私が横にスクロールして戻ってくると、 'onBindViewHolder'が再び呼び出され、誤った乱数値が使用されます。画像に間違ったアイコンが表示されます。
誰でもこの問題を解決する方法を教えていただけますか?
他のステートメントは、あなたがヌルのIDをチェックする場所、静的な画像を設定するelse節に追加します。 –
私はそれがどのように役立つかについて懐疑的です...私はそれを試してみましょう...あなたが病気を助けるならば...他の洞察も助けになるまで –
うわー...驚くほど何とか働いた...なぜそれが起こっていたのか理解したいと思います...なぜそれが問題だったのかについての回答を提出してもらえますか? –