2016-07-19 7 views
0

Ich arbeite mit ReyclerView, um eine Menge der Ansicht in RecyclerView Zeilen durch Parameter anzuzeigen.RecyclerView: Hinzufügen von Ansicht in Zeile durch Parameter

Ich habe einige Referenzen gelesen über verschiedene Ansichten in einer Reihe anzuzeigen. here und here aber das ist nicht was ich brauche.

Dies ist mein Code des Adapters

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); 
     } 
    } 


} 

Wie mein Code oben, wenn item.getParams() == 0 es BookingFlightViewHolder Ansicht angezeigt wird und wenn item.getParams()==1 es wird NormalTextViewHolder Ansicht angezeigt werden soll.

Die Ansicht ist, erscheint in der Zeile nicht durch die Position der Zeile ab, sondern ist abhängig von item.getParams()==x

Meine Frage ist, wie Blick in Reihe von Parametern abhängig angezeigt werden?

+0

Ich konnte nicht herausfinden, was hier Ihre Frage? – toantran

+0

Entschuldigung für Missverständnis, meine Fragen ist, wie die Ansicht abhängig von Parametern angezeigt werden? – Sen

+1

bei '' 'onCreateViewHolder''' Ich denke, Sie sollten' '' wechseln (viewType) { Fall 0: brechen; Fall 1: Pause } '' ' –

Antwort

0

mit meinem Code Versuchen:

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

Ich fand Fehler wie folgt in Ihrem Code: Invalid Index 1, Größe ist 1 – Sen

+0

ahh mein dumm haha. danke2 Herr. – Sen

+0

@Baras;) Gern geschehen! –

Verwandte Themen