我也见过类似的问题,但对我没有帮助。我会尽量把我的问题说得具体一点。我的购物车里有产品清单。当我在搜索产品我想要按钮“添加到购物车”禁用项目,这是已经在购物车。
购物车项目列表在我的视图模型中。
我的方法如下-当onBindViewHolder被调用为一个特定的位置,我需要搜索当前项目(产品)是否存在于购物车中的项目列表中,如果它存在,然后禁用按钮。
这里我的问题是Cart在Viewmodel中,而我发现自己无法从OnBindViewholder方法调用Viewmodel。
有没有更好的办法来做这件事?
@Override
public void onBindViewHolder(@NonNull ProductAdapter.OurViewHolder viewHolder, int i) {
Products currentItem = adapterData.get(i);
viewHolder.productNamesFragmentItemsBinding.setProductName(currentItem);
if (currentItem.getPhotoUris() != null) {
Picasso.get().load(currentItem.getPhotoUris().get(0)).into(viewHolder.productNamesFragmentItemsBinding.ivProductImage);
// now i want to search if current item is present in cart (cart is in viewModel), if item
// is present in cart then disable "Add to Cart" button for current position
//--------------todo : how to do it ??? -----------------------------------
}
}
使用ViewModelProvider初始化。您可以在构造函数中进行一次初始化,如下所示(抱歉命名,这段代码是为一个项目编写的,我只是从那里复制粘贴过来的:(
public class CartChildAdapter extends RecyclerView.Adapter<CartChildAdapter.CartHolder> {
private ShoppingCartWishListViewModel shoppingCartWishListViewModel;
public CartChildAdapter(Context context) {
// this is the line you are looking for. Cast context with FragmentActivity
this.shoppingCartWishListViewModel = new ViewModelProvider((FragmentActivity)context).get(ShoppingCartWishListViewModel.class);
}
@Override
public void onBindViewHolder(@NonNull CartChildAdapter.CartHolder holder, int position) {
// call from here
this.shoppingCartWishListViewModel.getMyProduct(your parameters may be).observe(this,..){
......... Your Codes
}
}