2016-04-16 18 views
5

Ich habe einen RecyclerView, wenn ich in der ersten Ansicht klicke, fügt es eine andere Ansicht wie im Bild hinzu, was ich will, ist die "add" Ansicht, welche ID ist "1" zu sein in der letzten Position des Recyclers statt in der ersten. enter image description hereAndroid: festen Gegenstand auf RecyclerView setzen

Mein Adapter:

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

    private List<String> items = new ArrayList<>(); 

    public void addItem(String name) { 
     items.add(name); 
     notifyItemInserted(items.size() - 1); 
    } 

    public void removeItem(int position) { 
     items.remove(position); 
     notifyItemRemoved(position); 
     notifyItemRangeChanged(position, items.size()); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     View view = inflater.inflate(R.layout.add_event_item, parent, false); 

     return new ViewHolder(view); 
    } 


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

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.setEventNameName(i + ""); 
     if(position == 0) 
     { 
      holder.theLayout.setBackgroundColor(Color.parseColor("#7F9099")); 
      holder.eventName.setText("Add"); 
     } 

    } 
    static int i; 
    class ViewHolder extends RecyclerView.ViewHolder{ 

     public TextView eventName; 
     public RelativeLayout theLayout; 




     public ViewHolder(final View itemView) { 
      super(itemView); 
      eventName = (TextView)itemView.findViewById(R.id.eventName); 
      theLayout = (RelativeLayout)itemView.findViewById(R.id.backgroundevent); 

      theLayout.setId(++i); 

      theLayout.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (getAdapterPosition()>0){ 
         removeItem(getAdapterPosition()); 
        }else { 
         addItem(""); 
        } 
       } 
      }); 

     } 

     public void setEventNameName(String TheEventName){ 
      eventName.setText(TheEventName); 
     } 
    } 
} 

In der Aktivität:

final AddEventsAdapter AddContainer = new AddEventsAdapter(); 
    AddEventsRecycler.setLayoutManager(new LinearLayoutManager(this)); 
    AddEventsRecycler.setAdapter(AddContainer); 
    AddEventsRecycler.setItemViewCacheSize(666); 

    RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); 
    itemAnimator.setAddDuration(1000); 
    itemAnimator.setRemoveDuration(1000); 
    AddEventsRecycler.setItemAnimator(itemAnimator); 

    AddContainer.addItem(""); 

Antwort

0

Haben Sie versucht, so etwas wie:

public void addItem(String name) { 
     if (items.size() != 0) { 
      removeItem(items.size() - 1); 
      items.add(name); 
      items.add("Add"); 
     } else 
      items.add("Add"); 

     notifyItemInserted(items.size() - 1); 
    } 

dann Artikel-ID von Add ist items.size() -1

edit: ändern, wenn in Ihrer Holder-Klasse mit folgendem Code:

 if(position == items.size() - 1) 
    {  
     holder.theLayout.setBackgroundColor(Color.parseColor("#7F9099")); 
        holder.eventName.setText("Add"); 
       } 
+0

Es stürzt beim Öffnen der Aktivität –

+0

Was ist eine Ausnahme Nachricht? – MilanNz

+0

java.lang.IndexOutOfBoundsException: Ungültiger Index 0, Größe ist 0 –