Ich verwende this Bibliothek, um meine RecycleView
zu behandeln, um Elemente hinzuzufügen. Ich habe ein Layout mit einer ImageView
und einer Klasse. Ich habe eine Liste mit einem Objekt und möchte diese zur RecycleView
hinzufügen.Recycleviewer - Wie wird das Layout wiederverwendet?
Also im Grunde wie folgt aus:
Mein item_main.xml
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
<ImageView
android:id="@+id/cover_image"
android:layout_width="180dp"
android:layout_height="264dp"
android:scaleType="centerCrop" />
</FrameLayout>
Mein activity_main.xml
(alle nicht):
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</android.support.v4.widget.SwipeRefreshLayout>
Und meine Klasse MyObject
:
public class MyObject extends AbstractItem<MyObject, MyObject.ViewHolder> implements Serializable {
@SerializedName(value="id")
private int id;
@SerializedName(value="name")
private String name;
@Expose
private String linkToImage;
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public int getType() {
return R.id.image;
}
//The layout to be used for this type of item
@Override
public int getLayoutRes() {
return R.layout.item_main;
}
@Override
public void bindView(ViewHolder viewHolder, List<Object> payloads) {
//call super so the selection is already handled for you
super.bindView(viewHolder, payloads);
//bind our data
//set the text for the name
Picasso.with(viewHolder.itemView.getContext())
.load(linkToImage)
.into(viewHolder.image);
}
//The viewHolder used for this item. This viewHolder is always reused by the RecyclerView so scrolling is blazing fast
protected static class ViewHolder extends RecyclerView.ViewHolder {
protected ImageView image;
public ViewHolder(View view) {
super(view);
this.image = (ImageView) view.findViewById(R.id.cover_image);
}
}
}
Das funktioniert sehr gut. Die Sache ist jetzt, dass ich diese in einer anderen Activity
mit einer anderen RecycleView
aber derselben List<MyObject>
und derselben item_main.xml
wiederverwenden möchte.
Ich habe versucht, den gleichen Code zu verwenden, den ich in MainActivity
habe. Es scheint die Elemente hinzuzufügen (es gibt den Namen in onClick
aus) aber es lädt die Bilder nicht.
Hier ist mein Code in der MainActivity
:
RecyclerView mRecyclerView;
mRecyclerView = (RecyclerView) findViewById(R.id.mainRecycleView);
mRecyclerView.setLayoutManager(new GridLayoutManager(getApplicationContext(), 2));
FastItemAdapter fastAdapter = new FastItemAdapter();
mRecyclerView.setAdapter(fastAdapter);
fastAdapter.add(listOfMyObjects);
DefaultItemAnimator animator = new DefaultItemAnimator() {
@Override
public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) {
return true;
}
};
fastAdapter.withSelectable(true);
fastAdapter.withOnClickListener(new FastAdapter.OnClickListener<MyObject>() {
@Override
public boolean onClick(View v, IAdapter<MyObject> adapter, MyObjectitem, int position) {
Log.d("DEBUG", item.getName());
return true;
}
});
mRecyclerView.setItemAnimator(animator);
Irgendwelche Ideen? Vielen Dank.
Gibt es einen Fehler in Logcat? –
@ReazMurshed - nein, es startet die Aktivität normalerweise, lädt die Daten (Die Liste) und lädt sogar in den RecycleView, es zeigt nur nicht das Bild –
user3024750
Bitte lesen Sie die Antwort unten. Hier ist ein potenzieller Fehler. –