1

私はAndroidで新品です。私のアプリケーションはRecycler Viewを利用しており、firebaseはRecyclerビューのチェックボックスを追加、編集するトリガアップデートを送信します。リサイクルから取り除く外出先で見る

インタラクティブはサーバーからトリガーされた更新を取得し、サーバーからプレゼンターを通じてaddItem、UpdateItem、またはRemoveItemメソッドを呼び出します。

私はRecycler Viewに追加して更新することはできますが、Recyclerビューからアイテムを削除しようとすると、アダプターの位置を取得するのが困難です。

反復処理では、ArrayListのインデックスを調べることができますが、削除するビューの位置を取得する方法はわかりません。

以下のremoveItemメソッドのコードは、必要なビューを完全に削除しますが、最後のビューを再度複製(追加)します。 私が必要とするのは、複製ビューを追加せずにビュー全体を削除することです。私はgetadapterPosition()を得る方法を知らないので、私はonClickのようなローカルトリガーを扱っていないからです。

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

iteratorを使用してiterator.remove()で削除しようとしましたか? –

+0

私はより明確にするために私の質問を更新しました。 arraylistから削除したアイテムに基づいてビューを削除する必要があります。 – topgun

答えて

0

私はIteratorを使用して問題を解決しました。

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

回答ありがとうTomasz Czura。

関連する問題