2016-04-24 7 views
1

Ich zeige Elemente auf einem Android RecyclerView, und ich möchte in der Lage sein, ein beliebiges Element auszuwählen, und legen Sie es dann am Ende der Liste. Ich weiß, wie man Elemente hinzufügt oder entfernt, aber ich suche nach dem saubersten Weg, dies zu erreichen.Android RecyclerView Element zum Ende der Ansicht verschieben

Wenn möglich, suche ich auch nach einer Animation, die diesen Gegenstand beim Überfahren über die anderen fliegen lässt.

Hier ist meine adapter:

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

    private List<DiscoveredUser> _items; 

    public DiscoverViewAdapter(List<DiscoveredUser> items) { 
     this._items = items; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder 
    { 
     TextView userName; 
     TextView userAge; 
     TextView userDescription; 

     public ViewHolder(View itemView) 
     { 
      super(itemView); 
      userName = (TextView) itemView.findViewById(R.id.user_name); 
      userAge = (TextView) itemView.findViewById(R.id.user_age); 
      userDescription = (TextView) itemView.findViewById(R.id.user_description); 
     } 
    } 


    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.user_discover_row, viewGroup, false); 
     return new ViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int i) { 
     DiscoveredUser user = _items.get(i); 

     viewHolder.userName.setText(user.getUsername()); 
     viewHolder.userAge.setText(Integer.toString(user.getAge())); 
     viewHolder.userDescription.setText(user.getDescription()); 
    } 

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

    public void remove(int position) { 
     //_items.remove(position); 
     //notifyItemRemoved(position); 
    } 

    public void add(DiscoveredUser user, int position) { 
     _items.add(position, user); 
     notifyItemInserted(position); 
    } 

    public void addMultiple(DiscoveredUser[] users){ 

     final int size = users.length; 
     for (DiscoveredUser user : users) { 
      _items.add(0, user); 
     } 
     notifyItemRangeInserted(0, size); 
    } 
} 

Antwort

1

Ich weiß nicht, dass die notifyItemMoved() Funktion existierte. Ich habe einfach das Element aus meiner arraylist entfernt und am Ende wieder hinzugefügt. Dann rief ich an. Mit einem ItemAnimator habe ich die Animation, die ich wollte.

0
das Element am Ende Ihres List bewegen

und Ihre Adapter neu zu laden.

Edit: Um die Adapter Verwendung nachladen:

adapter.notifyDataSetChanged() 
+0

Welche Methode sollte ich verwenden, um den RecyclerView neu zu laden? Einer von denen? 'notifyItemChanged (int) notifyItemInserted (int) notifyItemRemoved (int) notifyItemRangeChanged (int, int) notifyItemRangeInserted (int, int) notifyItemRangeRemoved (int, int)' – FrenchFalcon

+0

Verwendung adapter.notifyDataSetChanged() http: // stackoverflow.com/a/2919808/2792899 –

+0

Ich benutze keine Listview, die Art der Aktualisierung und Benachrichtigung eines 'RecyclerView'differs von einem einfachen' Listview' – FrenchFalcon

Verwandte Themen