一个视图中有两个列表的Recyclerview?

7

您好,

我需要制作一个屏幕,可以显示出竞标的赢家和输家。

它需要呈现如下的样子:

TextView - Winners
Name and bid amount
Name and bid amount
Name and bid amount
--------------------
Textview - Losers
Name and bid amount
Name and bid amount
Name and bid amount
Name and bid amount

来自Web服务的响应如下:

{
  "winningBids": [
    {
      "amount": 500,
      "quantity": 1,
      "name": "Craig",
      "status": "WINNING"
    }
  ],
  "losingBids": [
    {
      "amount": 461,
      "quantity": 1,
      "name": "Bob",
      "status": "LOSE"
    },
    {
      "amount": 460,
      "quantity": 1,
      "name": "James",
      "status": "LOSE"
    }
  ]
}

我考虑在同一个屏幕上使用2个RecyclerView,但我认为这不可行,因为获胜和失败列表可能会非常长,这意味着有两个不同滚动区域的部分。有没有办法将获胜和失败放在同一个RecyclerView中,并用标题指示获胜者和失败者列表以及获胜者和失败者列表之间的线?
我的屏幕目前是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  app:layout_behavior="@string/appbar_scrolling_view_behavior"
  tools:context="com.example.app.BiddingHistoryActivity"
  tools:showIn="@layout/activity_bidding_history">

  <android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:padding="@dimen/padding_16"
    android:background="@drawable/border_bottom"
    android:layout_height="wrap_content"/>
</RelativeLayout>

我的行是一个简单的TextView,用于显示名称,另一个TextView用于显示出价金额。

如果您有实现这个功能的想法,将不胜感激。

谢谢


在一个RecyclerView中简单地使用2个不同的ViewHolders进行填充 - 一个用于标题winner/looser,另一个用于每一行? - yennsarah
你有示例吗?我可以看一下吗? - Stillie
1
https://dev59.com/3eo6XIcBkEYKwwoYIAgL#26573338 - yennsarah
我看了一下,因为我正在使用多个标题,所以我不知道如何使用那个。一个用于获胜者,另一个用于失败者。 - Stillie
2个回答

5

为不同的视图创建不同的ViewHoldersTYPE_HEADER_WINNERTYPE_HEADER_LOOSERTYPE_ITEM

按照这里的说明完成适配器。

修改:

 private static final int TYPE_HEADER_WINNER = 0;
 private static final int TYPE_HEADER_LOOSER = 1;
 private static final int TYPE_ITEM = 2;

 @Override
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == TYPE_ITEM) {
        //inflate your layout and pass it to view holder
        return new VHItem(null);
    } else if (viewType == TYPE_HEADER_WINNER) {
        //inflate your layout and pass it to view holder
        return new VHHeaderWinner(null);
    } else if (viewType == TYPE_HEADER_LOOSER) {
        //inflate your layout and pass it to view holder
        return new VHHeaderLooser(null);
    }

    throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof VHItem) {
        String dataItem = getItem(position);
        //cast holder to VHItem and set data
    } else if (holder instanceof VHHeaderWinner) {
        //cast holder to VHHeaderWinner and set data for header.
    } else if(holder instanceof VHHeaderLooser){        
        //cast holder to VHHeaderLooser and set data for header.
    }
}

@Override
public int getItemCount() {
    return data.length + 2; //Since you have 2 headers
}

@Override
public int getItemViewType(int position) {
    if (position == 0)
        return TYPE_HEADER_WINNER;
    if (position == winnerCount + 1) 
        return TYPE_HEADER_LOOSER;           

    return TYPE_ITEM;
}

class VHHeaderLooser extends RecyclerView.ViewHolder {
    Button button;

    public VHHeader(View itemView) {
        super(itemView);
    }
}

class VHHeaderWinner extends RecyclerView.ViewHolder {
    Button button;

    public VHHeader(View itemView) {
        super(itemView);
    }
}

0
请参考这个简单的教程,在其中您可以在一个RecyclerView中创建2个ViewHolder。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接