2016-07-19 5 views
0

RecyclerViewの行で多くのビューをパラメータで表示するには、ReyclerViewと一緒に作業しています。RecyclerView:パラメータを使ってビューを行内に追加する

複数の異なるビューを連続して表示する方法について、いくつかの参考文献を読んでいます。 herehereでも、それは私が必要とするものではありません。

は、これは私のアダプタのコード、それはビューBookingFlightViewHolderが表示されます​​上記の私のコードのように

public class NewChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private List<NewChatModel> mListChatting; 
    private Context mContext; 


    public NewChatAdapter(List<NewChatModel> mListChatting, Context mContext) { 
     this.mListChatting = mListChatting; 
     this.mContext = mContext; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     Log.d("TAG", "getItemViewPosition : " + position); 
     NewChatModel item = mListChatting.get(position); 
     if(item.getParams()==0){ 
      return 0; 
     }else if(item.getParams()>0){ 
      return 1; 
     } 
     return 1; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     NewChatModel items = mListChatting.get(viewType); 
     Log.i("onCreateVewHo(viewType)", "viewType=" + viewType); 

     RecyclerView.ViewHolder viewHolder; 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     if(items.getParams()==0){ 
      View viewBooking = inflater.inflate(R.layout.view_booking_flight, parent, false); 
      viewHolder = new BookingFlightViewHolder(viewBooking); 
     }else{ 
      View normalView = inflater.inflate(R.layout.item_new_chat,parent, false); 
      viewHolder = new NormalTextViewHolder(normalView); 
     } 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     Log.i("onBindViewHolder", "viewholder.getItemViewType()=" + holder.getItemViewType()); 
     NewChatModel item = mListChatting.get(position); 
     if(item.getParams()==0){ 
      final BookingFlightViewHolder bookingFlightViewHolder = (BookingFlightViewHolder) holder; 
      bookingFlightViewHolder.mSendBooking.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Toast.makeText(mContext, "Booking", Toast.LENGTH_LONG).show(); 
        bookingFlightViewHolder.mFormBookingan.setVisibility(View.GONE); 
        bookingFlightViewHolder.mDetailBookingan.setVisibility(View.VISIBLE); 
       } 
      }); 
     }else{ 
      NormalTextViewHolder normalTextViewHolder = (NormalTextViewHolder) holder; 
      normalTextViewHolder.mContentText.setText(item.getMessage()); 
     } 
    } 


    @Override 
    public int getItemCount() { 
     return mListChatting.size(); 
    } 


    public class BookingFlightViewHolder extends RecyclerView.ViewHolder{ 
     public Button mOneOway; 
     public Button mRoundTrip; 
     public EditText mDeparture; 
     public EditText mDestination; 
     public EditText mDepartureDate; 
     public EditText mReturnDate; 
     public FrameLayout mAdult; 
     public FrameLayout mChild; 
     public FrameLayout mBaby; 
     public EditText mCabin; 
     public Button mSendBooking; 
     public LinearLayout mFormBookingan; 
     public LinearLayout mDetailBookingan; 
     public BookingFlightViewHolder(View itemView) { 
      super(itemView); 
      mOneOway = (Button) itemView.findViewById(R.id.button_oneWay); 
      mRoundTrip = (Button) itemView.findViewById(R.id.button_roundTrip); 
      mDeparture = (EditText) itemView.findViewById(R.id.editText_departure); 
      mDestination = (EditText) itemView.findViewById(R.id.editText_destination); 
      mDepartureDate = (EditText) itemView.findViewById(R.id.editText_departureDate); 
      mReturnDate = (EditText) itemView.findViewById(R.id.editText_returnDate); 
      mAdult = (FrameLayout) itemView.findViewById(R.id.frameLayout_adult); 
      mChild = (FrameLayout) itemView.findViewById(R.id.frameLayout_child); 
      mBaby = (FrameLayout) itemView.findViewById(R.id.frameLayout_baby); 
      mCabin = (EditText) itemView.findViewById(R.id.editText_cabin); 
      mSendBooking =(Button) itemView.findViewById(R.id.button_sendBookingFlight); 
      mFormBookingan = (LinearLayout) itemView.findViewById(R.id.linearLayout_formBookingan); 
      mDetailBookingan = (LinearLayout) itemView.findViewById(R.id.lenarLayout_detailBookingan); 
     } 
    } 

    public class NormalTextViewHolder extends RecyclerView.ViewHolder{ 
     public TextView mContentText; 
     public NormalTextViewHolder(View itemView) { 
      super(itemView); 
      mContentText = (TextView) itemView.findViewById(R.id.textView_message); 
     } 
    } 


} 

、およびitem.getParams()==1それはビューNormalTextViewHolderが表示されますです。

図であるが、行の位置によって異なりますが、私の質問は、パラメータに依存行のビューを表示する方法であるitem.getParams()==x

に依存していない行に表示されますか?

+0

私はあなたの質問がここにあるものを見つけることができませんでしたか? – toantran

+0

ごめんなさい、私の質問は、パラメータに依存してビューを表示する方法ですか? – Sen

+1

on '' onCreateViewHolder'''私は '' 'switch(viewType){ case 0: breakを使うべきだと思います。 case 1: break } '' ' –

答えて

0

私のコードで試してみてください。

public class NewChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private List<NewChatModel> mListChatting; 
    private Context mContext; 


    public NewChatAdapter(List<NewChatModel> mListChatting, Context mContext) { 
     this.mListChatting = mListChatting; 
     this.mContext = mContext; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     Log.d("TAG", "getItemViewPosition : " + position); 
     NewChatModel item = mListChatting.get(position); 
     return item.getParams() != 0 ? 1 : 0; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     RecyclerView.ViewHolder viewHolder = null; 
     LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); 
     switch (viewType) { 
      case 0: 
       View viewBooking = inflater.inflate(R.layout.view_booking_flight, parent, false); 
       viewHolder = new BookingFlightViewHolder(viewBooking); 
       break; 
      case 1: 
       View normalView = inflater.inflate(R.layout.item_new_chat, parent, false); 
       viewHolder = new NormalTextViewHolder(normalView); 
       break; 
     } 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 

     if(holder instanceof BookingFlightViewHolder){ 

      (((BookingFlightViewHolder) holder)).mSendBooking.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Toast.makeText(mContext, "Booking", Toast.LENGTH_LONG).show(); 
        (((BookingFlightViewHolder) holder)).mFormBookingan.setVisibility(View.GONE); 
        (((BookingFlightViewHolder) holder)).mDetailBookingan.setVisibility(View.VISIBLE); 
       } 
      }); 
     }else { 
      (((NormalTextViewHolder) holder)).mContentText.setText(item.getMessage()); 
     } 

    } 


    @Override 
    public int getItemCount() { 
     return mListChatting.size(); 
    } 


    public static class BookingFlightViewHolder extends RecyclerView.ViewHolder { 
     public Button mOneOway; 
     public Button mRoundTrip; 
     public EditText mDeparture; 
     public EditText mDestination; 
     public EditText mDepartureDate; 
     public EditText mReturnDate; 
     public FrameLayout mAdult; 
     public FrameLayout mChild; 
     public FrameLayout mBaby; 
     public EditText mCabin; 
     public Button mSendBooking; 
     public LinearLayout mFormBookingan; 
     public LinearLayout mDetailBookingan; 

     public BookingFlightViewHolder(View itemView) { 
      super(itemView); 
      mOneOway = (Button) itemView.findViewById(R.id.button_oneWay); 
      mRoundTrip = (Button) itemView.findViewById(R.id.button_roundTrip); 
      mDeparture = (EditText) itemView.findViewById(R.id.editText_departure); 
      mDestination = (EditText) itemView.findViewById(R.id.editText_destination); 
      mDepartureDate = (EditText) itemView.findViewById(R.id.editText_departureDate); 
      mReturnDate = (EditText) itemView.findViewById(R.id.editText_returnDate); 
      mAdult = (FrameLayout) itemView.findViewById(R.id.frameLayout_adult); 
      mChild = (FrameLayout) itemView.findViewById(R.id.frameLayout_child); 
      mBaby = (FrameLayout) itemView.findViewById(R.id.frameLayout_baby); 
      mCabin = (EditText) itemView.findViewById(R.id.editText_cabin); 
      mSendBooking = (Button) itemView.findViewById(R.id.button_sendBookingFlight); 
      mFormBookingan = (LinearLayout) itemView.findViewById(R.id.linearLayout_formBookingan); 
      mDetailBookingan = (LinearLayout) itemView.findViewById(R.id.lenarLayout_detailBookingan); 
     } 
    } 

    public static class NormalTextViewHolder extends RecyclerView.ViewHolder { 
     public TextView mContentText; 

     public NormalTextViewHolder(View itemView) { 
      super(itemView); 
      mContentText = (TextView) itemView.findViewById(R.id.textView_message); 
     } 
    } 


} 
+0

あなたのコードでこのようなエラーが見つかりました:無効なインデックス1、サイズは1 – Sen

+0

ああ私の愚かな笑。ありがとうございます。 – Sen

+0

@Baras;)大歓迎です! –

関連する問題