I'm working with ReyclerView
to display a lot of view in RecyclerView
's rows by parameters.
I have read some references about display different views in a row. here and here but that's not what I need.
This is my adapter's code
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);
}
}
}
Like my code above, when item.getParams() == 0
it will display view BookingFlightViewHolder
and when item.getParams()==1
it will display view NormalTextViewHolder
.
The view is appears in row not depend by position of row but depend on item.getParams()==x
My Question is How to display view in row depend on parameters?