Mam więc widok, który reprezentuje pojedynczy wiersz w RecyclerView, a każdy wiersz ma przycisk usuwania.

ItemSummaryView

public class ItemSummaryView extends RelativeLayout {
 ....
   public void setOnItemClickListener(MyAdapter.OnItemClickListener onItemClickListener) {
       this.onItemClickListener = onItemClickListener;
    }
 ....
   deleteBtn.setOnClickListener(v -> onItemClickListener.onDeleteClick());
} 

W moim adapterze używam ItemSummaryView jako części mojego uchwytu widoku

myADapter

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

   public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       return new ItemViewHolder(inflater.inflate(R.layout.item_view, parent, false));
      }
      return null;
  }

   @Override
   public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) 
        ((ItemViewHolder) holder).bind(itemsList.get(position), itemsList.size() > 1);
      }
  }

    public interface OnItemClickListener {
        void onDeleteClick();
    }

 private class ItemViewHolder extends RecyclerView.ViewHolder {

    private final String ITEM = "item";
    private ItemSummaryView view;

    private ItemViewHolder(@NonNull View itemView) {
        super(itemView);
        view = (ItemSummaryView) itemView;
        view.setOnItemClickListener(onItemClickListener);
    }

    private void bind() {
        view.setContentDescription(ITEM + getAdapterPosition());
    }
  }
}

A potem na moim fragmencie chcę zaimplementować metodę delete

myFragment

public class MyFragment implements MyAdapter.OnItemClickListener  {

      @Override
      public void onDeleteClick() {
        //add logic here to delete row
      }
}

Moje pytanie brzmi: jak uzyskać pozycję wiersza po kliknięciu przycisku usuwania z fragmentu, aby móc go usunąć (implementacja kliknięcia w adapterze nie jest opcją).

0
alexC 20 listopad 2019, 23:23
Czy masz zrzuty ekranu jako przykład? Bardzo trudno jest zrozumieć, co próbujesz tutaj osiągnąć i dlaczego musisz użyć Fragmentu. i dlaczego nie możesz użyć kliknięcia w adapterze.
 – 
apmartin1991
21 listopad 2019, 01:07

1 odpowiedź

MyADapter.

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements MyAdapter.OnItemClickListener {

     private OnItemClickListener listener;
     .
     .
     .
     public void setListener(OnItemClickListener listener){

        this.listener = listener;
     }

     @Override
     public void onDeleteClick() {

        listener.onDeleteClick();
     }

Myfragment.

adapter.setListener(this);

Ma nadzieję, że to pomaga.

0
GuanHongHuang 21 listopad 2019, 03:48