2016-04-12 13 views
2

おはよう、Recyclerviewには2つのリストが1つのビューで表示されますか?

私はこの画面を持っていますが、入札の勝者と敗者の両方を表示する場所にしたいと思います。それは見てする必要がどのように

このようなものです:Webサービスからの応答は以下の通りです

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 

{ 
    "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 RecyclerViewsを持っていることについて考えたが、私は思ういけません勝利と敗北の両方でこのリストがうまくいかない場合は、別のスクロール領域の2つのセクションを意味する非常に長くなる可能性があります。勝者と敗者のリストと勝者と敗者のリストを示す見出しで、同じリサイクルビューで勝利と敗北の両方を行う方法はありますか?

私の画面では、現在、次のとおりです。

<?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のです。

私がこれをどのように実装できるかについてのあなたの考えは非常に高く評価されます。 TYPE_HEADER_WINNERTYPE_HEADER_LOOSERTYPE_ITEMを:

+0

ヘッダー 'winner/looser'と各行の2番目の' ViewHolders'を1つの 'RecyclerView'で膨らませて使用しますか? – yennsarah

+0

私は見ることができる例がありますか? – x10sion

+1

http://stackoverflow.com/a/26573338/4908802 – yennsarah

答えて

4

はあなたの別のビューの異なるViewHoldersを作成いただきありがとうございます。

完全なアダプタhereの指示に従ってください。

変更:

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

を使用すると、1つのRecyclerViewで2 ViewHolder年代を作成する可能性を持っているシンプルなtutorialを、喜ばください。

関連する問題