Ich bin neu in Android. Ich versuche gerade, eine App mit einem Listenansicht-Bildschirm zu erstellen, auf dem eine Liste mit Büchern angezeigt wird. Für jedes Element gibt es ein von der URL heruntergeladenes Bild und zwei Symbole, deren Bildressource basierend auf den in einem POJO-Objekt eingestellten Werten festgelegt ist.Android RecyclerView Artikel Sequenz Problem
Mein Adapter-Code ist wie folgt:
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>
Nun ist das Problem kommt, wenn ich über den Bildschirm scrollen. Beim ersten Laden werden die Symbolwerte und Bilder perfekt geladen. Wenn ich aber blättern und zurückkehre, wird der 'onBindViewHolder' erneut aufgerufen und falsche Zufallswerte werden verwendet. Dadurch werden falsche Symbole in den Bildern angezeigt.
kann mir jemand helfen, wie das zu beheben ... ??
ich will nicht die Bilder neu geladen werden oder die Symbole aufgefrischt werden, es sei denn
benötigt
add else statement, wo Sie die ID für null überprüfen, in else-Klausel statische Bilder füllen, hoffe, dies wird Ihnen helfen. –
Ich bin skeptisch, wie das helfen würde ... ich werde es versuchen ... wenn es hilft, dann lass es dich wissen ... bis dahin wäre jede andere Einsicht hilfreich –
Wow ... Erstaunlicherweise hat das irgendwie funktioniert ... ich würde gerne verstehen, warum es passiert ist ... Könnten Sie bitte eine Antwort mit einigen Details einreichen, warum war es ein Problem vor –