2016-07-19 2 views
0

Я работаю с ReyclerView, чтобы отобразить много видов в строках RecyclerView по параметрам.RecyclerView: добавление вида в строку по параметрам

Я прочитал несколько ссылок о отображении разных видов в строке. here и here, но это не то, что мне нужно.

Это код моего адаптера

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() == 0 он покажет вид BookingFlightViewHolder и когда item.getParams()==1 он покажет вид NormalTextViewHolder.

Зрения появляется в строке не зависит от позиции строки, а зависят от item.getParams()==x

Мой вопрос заключается в том, чтобы отобразить представление в строке зависит от параметров?

+0

я не мог узнать, что ваш вопрос здесь? – toantran

+0

Извините за недоразумение, мои вопросы: как отображать представление зависит от параметров? – Sen

+1

на '' 'onCreateViewHolder''' Я думаю, вы должны использовать' '' switch (viewType) { case 0: break; случай 1: разрыв } '' ' –

ответ

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

ahh my stupid haha. спасибо2 сэр. – Sen

+0

@ Барас;) Добро пожаловать! –

Смежные вопросы