es auch in Listenansicht getan werden kann, alles, was Sie tun müssen, ist Blick in getView()
Verfahren von baseadapter aufblasen Zeigen Sie mehrere Typen von ListView-Zeilenlayout in Ihrem RecyclerView an - Sie brauchen nicht mehrere Adapter
Sie müssen die Methoden getItemCount und getItemViewType der Recycleransicht überschreiben und angeben, wie viele Typen Sie verwenden möchten Anzeige in der Liste Blick auf diese: RecyclerView item count
Hier ist ein Beispiel:
der Adapter:
public class NotificationsAdapter extends RecyclerView.Adapter<MultipleRowViewHolder> {
private LayoutInflater inflater = null;
// notification list
private List<Notification> notificationList;
public NotificationsAdapter(Context context, List<Notification> multipleRowModelList){
this.notificationList = multipleRowModelList;
inflater = LayoutInflater.from(context);
}
@Override
public MultipleRowViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = null;
if (viewType == NotificationType.Lick.getValue())
view = inflater.inflate(R.layout.lick_row_item, parent, false);
else if (viewType == NotificationType.Comment.getValue())
view = inflater.inflate(R.layout.comment_list_row, parent, false);
else if (viewType == NotificationType.ViewMyProfile.getValue())
view = inflater.inflate(R.layout.view_my_profile_list_row, parent, false);
else // if notification is not of the first three types get the view_my_profile_list_row layout
view = inflater.inflate(R.layout.view_my_profile_list_row, parent, false);
return new MultipleRowViewHolder(view, viewType);
}
@Override
public void onBindViewHolder(MultipleRowViewHolder holder, int position) {
try {
// display enum type as title
holder.titleTV.setText(NotificationType.toNotificationType(Integer.valueOf(notificationList.get(position).getType())).name());
// display pretty date
holder.actionTimeTV.setText(TimeUtils.getPrettyTimeDifference(notificationList.get(position).getActionTime()));
holder.sourceUserNameTV.setText(notificationList.get(position).getSourceUserName());
}catch (Exception e)
{
Log.e(NotificationReader.TAG,e.getMessage());
}
}
@Override
public int getItemCount() {
return notificationList.size();
}
@Override
public int getItemViewType(int position) {
Notification multipleRowModel = notificationList.get(position);
if (multipleRowModel != null)
return Integer.valueOf(multipleRowModel.getType());
return super.getItemViewType(position);
}
Das Datenmodell:
public class MultipleRowViewHolder extends RecyclerView.ViewHolder {
public TextView titleTV;
public TextView sourceUserNameTV;
public TextView actionTimeTV;
private int type;
public MultipleRowViewHolder(View itemView, int type) {
super(itemView);
titleTV = (TextView)itemView.findViewById(R.id.titleTV);
sourceUserNameTV = (TextView)itemView.findViewById(R.id.sourceUserNameTV);
actionTimeTV = (TextView)itemView.findViewById(R.id.actionTimeTV);
this.type = type;
}
}
Also muss ich eine Struktur mit allen Elementen von zwei Listen erstellen? Recht ? – z85510
Ja, in den Adapter müssen Sie beide Arten von Elementen in einer Liste Ihrer Wahl gespeichert haben und in der OnBindViewHolder nach dem Objekttyp füllen Sie die Layout-Attribute –
Vielen Dank, Sie sparen mich – z85510