回答
你可以在您的RecyclerView中顯示嚴重類型的列表視圖行佈局 - 您不需要多個適配器
您需要重寫回收器視圖的getItemCount和getItemViewType方法,並告訴它需要多少類型在列表看看這顯示:RecyclerView item count
下面是一個例子:
適配器:
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);
}
的數據模型:
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;
}
}
所以,你需要有兩種不同類型的項目在列表基地的基礎?使用RecyclerView而不是ListView,因爲它已經實現了ViewHolderPattern。在適配器中,有方法.onBindViwHolder(),接收int變量,重新設置元素類型。用它來綁定您的視圖
我用RecyclerView但我不知道如何將兩種類型的結構發送到其適配器 – z85510
create b ase類併爲每個結構擴展它。將對基類的引用傳遞給適配器。 –
它也可以在列表視圖來完成,所有你需要做的是根據條件
對於如充氣鑑於baseadapter的getView()
方法:
public void getView()
{
if(some condition)
{
view=LayoutInflator.from(context).inflate(R.layout.layout1,parent,null);
//bind the related elements in the view accordingly;
}
else
{
view=LayoutInflator.from(context).inflate(R.layout.layout2,parent,null);
//bind the related elements in the view accordingly;
}
}
- 1. 如何在haskell中結合兩種不同類型的列表
- 2. 在谷歌圖表API中結合兩種類別過濾器
- 3. 如何在網格視圖的單個適配器中使用兩種不同類型的陣列
- 4. 如何結合幾種類型約束?
- 5. 使回收器視圖適配器中的HashMap類型列表
- 6. 如何結合兩種字符類型變量
- 7. 如何在SQL Server 2000 DTS中結合兩種類型的動態屬性?
- 8. C#:支持多種類型的數據庫表與適配器
- 9. 結合表中的兩列
- 10. 在同一列中總結兩種不同的類型
- 11. 結合了兩種表與MySQL服務器不同的列
- 12. 如何設置兩個適配器到列表中?
- 13. 如何在MS Access 2010中結合多種查詢類型?
- 14. 如何實現兩種不同類型的分隔符(即標題)在ListView適配器類
- 15. 在C中的兩種不同類型的列表#
- 16. 結合在jython中的兩個列表
- 17. 將「使用」語句與類型化數據集表適配器結合使用
- 18. 在一種類型中的兩個通用列表
- 19. 在兩種不同類型的列表中比較變量
- 20. 如何在單個類中使用兩個適配器
- 21. 如何在一個類中調用兩個適配器android
- 22. set_intersection兩種不同類型的集合
- 23. 合併兩種不同類型的RDD
- 24. 如何在android中比較兩種不同類型的數組列表?
- 25. 有兩種類型的Arraylist:如何確定第一種類型?
- 26. JAVA - 如何結合兩個列表?
- 27. 如何結合兩個詞典列表
- 28. 如何在matlab中結合兩個分類模型?
- 29. 如何才能得到兩種不同類型的列表過濾器回收
- 30. 動態類型的數組列表和自定義適配器
所以我必須創建一個包含兩個列表中所有元素的結構體?對 ? – z85510
是的,在適配器中,您需要將兩種類型的元素存儲在您選擇的列表中,並根據對象類型在onBindViewHolder中填充其佈局屬性 –
非常感謝,您救了我 – z85510