0

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?

Community
  • 1
  • 1
Sen
  • 154
  • 1
  • 11
  • I could not find out what is your question here? – toantran Jul 19 '16 at 03:37
  • sorry for missunderstanding, my questions is how to display view depend on parameters? – Sen Jul 19 '16 at 03:39
  • 1
    at ```onCreateViewHolder``` i think you should use ```switch(viewType){ case 0 : break; case 1 : break }``` – Iris Louis Jul 19 '16 at 03:40
  • Your code looks fine, debug through the code and make sure that `item.getParams()` returns both zero and non-zero values – manman Jul 19 '16 at 03:47
  • @irisLouis i find an error like `NewChatAdapter$NormalTextViewHolder cannot be cast to com.example.putuguna.jigo.adapters.NewChatAdapter$BookingFlightViewHolder` – Sen Jul 19 '16 at 03:48
  • @Baras you can read answers [1](http://stackoverflow.com/a/26245463/3832212), [2](http://stackoverflow.com/a/26245463/3832212) or [tutorial](https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView) step by step. – Iris Louis Jul 19 '16 at 03:56

1 Answers1

0

Try with my 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);
        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);
        }
    }


}
Iris Louis
  • 297
  • 6
  • 19