1

Ich bin neu in Android. Meine Anwendung verwendet die Recycler-Ansicht und die Firebase sendet das auslösende Update zum Hinzufügen, Bearbeiten. Löschen Sie das Kontrollkästchen in der Recycler-Ansicht.Entfernen von Recycler View mit außerhalb

Der Interactor ruft das ausgelöste Update vom Server ab, der dann über den Presenter die Methode addItem, UpdateItem oder RemoveItem im Adapter aufruft.

Ich kann hinzufügen, in Recycler Ansicht gut aktualisieren, aber wenn ich versuche, das Element aus dem Recycler zu entfernen, habe ich Schwierigkeiten, die Position des Adapters zu bekommen.

Durch Iteration kann ich den Index von ArrayList herausfinden, aber ich weiß nicht, wie man Position der Ansicht erhält, um es zu entfernen.

Der folgende Code in der removeItem-Methode entfernt die erforderliche Ansicht völlig in Ordnung, aber auch die letzte Ansicht erneut duplizieren (hinzufügen). Was ich brauche ist, um die gesamte Ansicht zu entfernen, ohne die doppelte letzte Ansicht hinzuzufügen. Ich weiß nicht, wie man getadapterPosition() bekommt, da ich mich nicht mit lokalen Triggern wie onClick beschäftige.

public class CustomShoppingRecyclerAdapter extends RecyclerView.Adapter<CustomShoppingRecyclerAdapter.ViewHolder> implements ShoppingAdapterView { 
private final ArrayList<Shopping> mMessageList = new ArrayList<>(); 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_item, parent, false); 
    vh= new ViewHolder(v); 

    return new ViewHolder(v); 
} 

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 
    final Shopping current = mMessageList.get(position); 

    holder.mShoppingItemCheckBox.setTag(current.getItem()); 
    holder.mShoppingItemCheckBox.setText(current.getItem()); 
    holder.mShoppingItemCheckBox.setChecked(current.getItemStatus()); 
    holder.mShoppingItemCheckBox.setOnClickListener(null); 

    holder.mShoppingItemCheckBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        current.setItemStatus(holder.mShoppingItemCheckBox.isChecked()); 
        presenter.updateItemToServer(current); 
       tag= (String) holder.mShoppingItemCheckBox.getTag(); 
      } 
     }); 
} 

@Override 
public void removeItem(Shopping shopping) { 
    Integer index = 0; 

    for (Shopping _item : mMessageList) { 
     index = mMessageList.indexOf(_item); 

     if (_item.getItem().equals(shopping.getItem())) { 
       if (index != -1) { 
        mMessageList.remove(index); 
        notifyItemRemoved(index); 
       } 
     } 
    } 
} 

class ViewHolder extends RecyclerView.ViewHolder { 
    private CheckBox mShoppingItemCheckBox; 
    private TextView mMessageTextView; 

    ViewHolder(View itemView) { 
     super(itemView); 

itemView.findViewById(R.id.shopping_author); 
     mShoppingItemCheckBox = (CheckBox) itemView.findViewById(R.id.shopping_item); 
    } 
+0

Haben Sie versucht, Iterator zu verwenden und durch iterator.remove() zu entfernen? –

+0

Ich habe meine Frage aktualisiert, um es klarer zu machen. Ich muss die Ansicht basierend auf dem Element entfernen, das ich aus der Arraylist entferne. – topgun

Antwort

0

Als ich den Iterator benutzte, löste es mein Problem.

Integer index = 0; 
    Iterator<Shopping> it = mMessageList.iterator(); 
    while (it.hasNext()) { 

     if (it.next().getItem().equals(shopping.getItem())) { 
      it.remove(); 
      notifyItemRemoved(index); 
      notifyItemRangeChanged(index, mMessageList.size()); 
      // If you know it's unique, you could `break;` here 
     } 
     index=index+1; 
    } 

Danke Tomasz Czura für die Antwort.

Verwandte Themen