Error linking an adapter callback to my recycler

0

I hope you can help me, I have an adapter of a recycler in which I want to send a callback to its fragment that contains it, but I have a problem when linking the adapter. MY ADAPTER

   public Cartadapter2(Context context, List<Cart> cartList, Actualizarvalor callback) {
    this.context = context;
    this.cartList = cartList;
    this.callback = callback;


}

how do I implement the adapter in my Fragment

  private void displayCartItem(List<Cart> carts ) {
    Cartadapter2 cartadapter = new Cartadapter2(getContext(),carts,Actualizarvalor,this);
    recycler_cart.setAdapter(cartadapter);
}//en el "actualizarvalor" me genera un error

my COMPLETE FRAGMENT

public class Selection2 extends Fragment implements Actualizarvalor {

TextView catidadproductos, valortotal;
RecyclerView recycler_cart;
CompositeDisposable compositeDisposable;
List<Cart> cartList;
@Override
public void updateItemCount(boolean b) {
    Toast.makeText(getActivity(),"Datos de compra actualizados",Toast.LENGTH_SHORT).show();

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_selection2, container, false);
    compositeDisposable = new CompositeDisposable();
    catidadproductos=(TextView)v.findViewById(R.id.cant_productoss);
    valortotal=(TextView)v.findViewById(R.id.total);
    recycler_cart = (RecyclerView)v.findViewById(R.id.recycler_cart3);
    recycler_cart.setLayoutManager(new LinearLayoutManager(getActivity()));
    recycler_cart.setHasFixedSize(true);
    initDB();
    loadCartItems();
    catidadproductos.setText(String.valueOf (Common.cartRepository.countCartItems()));
    valortotal.setText(String.valueOf(Common.cartRepository.sumPrice()));


    return v;
}

private void loadCartItems() {
    compositeDisposable.add(
            Common.cartRepository.getCartItems()
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new Consumer<List<Cart>>() {
                        @Override
                        public void accept(List<Cart> carts) throws Exception {
                            displayCartItem(carts);

                        }
                    })
    );
}

private void displayCartItem(List<Cart> carts ) {
    Cartadapter2 cartadapter = new Cartadapter2(getContext(),carts,Actualizarvalor,this);
    recycler_cart.setAdapter(cartadapter);
}
private void initDB() {
    Common.edmtRoomDatabase = EDMTRoomDatabase.getInstance(getActivity());
    Common.cartRepository = CartRepository.getInstance(CartDataSource.getInstance(Common.edmtRoomDatabase.cartDAO()));
    Common.favoriteRepository = FavoriteRepository.getInstance(FavoriteDataSource.getInstance(Common.edmtRoomDatabase.favoriteDAO()));
}

}

the Interface UpdateValue and I have it created.

public interface Actualizarvalor {
void updateItemCount(boolean b);

}

Thank you very much for your help

    
asked by IGr135 29.10.2018 в 19:35
source

1 answer

0

Here is an example of how to communicate an adapter with a fragment:

Fragment:

public class MyFragment extends Fragment {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private MyAdapter adapter;
    private MyAdapter.InterfaceClickListener interfaceListener;

     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
         ...
         recyclerView = (RecyclerView) layout.findViewById(R.id...);
         layoutManager = new LinearLayoutManager(getActivity());
         interfaceListener = new MyAdapter.InterfaceClickListener() {
            @Override
            public void oExampleClickListener(Item item) {
            ..
           }
         }
         adapter = new MyAdapter(lista, interfaceListener);
         recyclerView.setLayoutManager(layoutManager);
         recyclerView.setAdapter(adapter);
    }
}

Adapter:

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
   List<Item> data = Collections.emptyList();
   InterfaceClickListener listener;

   public MyCarsListAdapter(List<Item> data, InterfaceClickListener listener) {
      this.data = data;
      this.listener = listener;
   }

   ...
   @Override
   public MyCarsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      LayoutInflater inflater = LayoutInflater.from(parent.getContext());
      View rowLayout=inflater.inflate(R.layout..., parent, false);
      MyViewHolder holder = new MyViewHolder(rowLayout, this.listener, parent.getContext());
     return holder;
   }

   @Override
   public void onBindViewHolder(MyViewHolder holder, int position) {
       holder.conectar(data.get(position));
       ...
   }

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

   public interface InterfaceClickListener {
    void oExampleClickListener(Item item);
   }

}

class MyViewHolder extends RecyclerView.ViewHolder {
   private MyAdapter.InterfaceClickListener listener;
   private Context context;
   private LinearLayout celda;

   MyViewHolder(View rowLayout, MyAdapter.InterfaceClickListener listener, Context context){
        super(rowLayout);
        this.celda = (LinearLayout) rowLayout.findViewById(R.id...);
        this.listener = listener;
        this.context = context;
   }

   void conectar(final Item item){
        this.celda.setOnClickListener(new View.OnClickListener() {
        @Override
           public void onClick(View v) {
             listener.oExampleClickListener(item);
           }
        });
   }
}

Greetings

    
answered by 29.10.2018 в 20:34