Recyclerview没有显示商品吗?

时间:2019-10-14 03:19:06

标签: java android android-recyclerview

我想在RecyclerView上显示下面的布局。此布局重复,具体取决于商店的数量。假设我们有2个商店,因此用户将看到两个布局,具有不同的商店名称。

Screenshot of Android Studio Design Editor on <code>item_checkout_delivery_slots</code> layout

适配器类:

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


    private Context context;
    LayoutInflater layoutInflater;
    List<Object> objects;
    private LayoutInflater inflater;
    private CallbackListener.SimpleCallback listener;

    public DeliverySlotsAdapter(Context context, List<Object> objects) {
        this.context = context;
        this.objects = objects;
        this.inflater = LayoutInflater.from(context);
    }

    public void setListener(CallbackListener.SimpleCallback listener) {
        this.listener = listener;
    }

    @Override
    public ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
        RecyclerView.ViewHolder viewHolder;
        View view= inflater.inflate(R.layout.item_checkout_delivery_slots, parent, false);
        return  new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        holder.bind(objects.get(position));

    }

    @Override
    public int getItemCount() {
        return objects.size() != 0 ? objects.size() : 0;
    }

    class ViewHolder extends RecyclerView.ViewHolder {
//        @BindView(R.id.rlSchedule)
//        RelativeLayout rlSchedule;
        @BindView(R.id.tvDeliveryScheduleLabel)
        TextView tvDeliveryScheduleLabel;
//        @BindView(R.id.tvDeliverySchedule)
//        TextView tvDeliverySchedule;

        public ViewHolder(View itemView) {
            super(itemView);

            itemView.setOnClickListener(v -> {
                if (listener!=null && getAdapterPosition() != RecyclerView.NO_POSITION) {
                    listener.onItemClick(objects.get(getAdapterPosition()));
                }
            });
        }

        public void bind(Object object){
            DeliverySlotItem deliverySlotItem = (DeliverySlotItem) object;
//            DeliverySlotItem item = new DeliverySlotItem();
//            Log.e("", "adfdfsf" + object);
//            tvDeliveryScheduleLabel.setText(item.shop_name);
            tvDeliveryScheduleLabel.setText(deliverySlotItem.shop_name + " Delivery");
        }

    }

}

tvDeliveryScheduleLabel正在获得商店名称,但是使用以下代码,它将返回null:

tvDeliveryScheduleLabel.setText(deliverySlotItem.shop_name + "Delivery");

这就是我获取值的方式。

Entity area = new Gson().fromJson(Preferences.getString(Prefkey.selected_area), Entity.class);
        this.controller.getItems(area.id, new CallbackListener.MultiEntityListener() {
            @Override
            public void onSuccess(List<Object> data, List<Object> included) {

                List<Entity> include = AppUtil.cast(included);
                List<Entity> shops = AppUtil.getEntitiesByType("shops", include);


                for (Entity shop : shops) {
                    DeliverySlotItem deliverySlotItem = new DeliverySlotItem();
                    deliverySlotItem.shop_name = shop.attributes.name;
                    Preferences.setString(Prefkey.selected_shop, shop.toString());
                    objects.add(deliverySlotItem);
                    deliverySlotItems.add(deliverySlotItem);

                }
            }

            @Override
            public void onFailed(Object object) {

            }
        });

        deliverySlotsAdapter = new DeliverySlotsAdapter(CheckoutActivity.this, objects);

        rv_deliveryslots.setLayoutManager(new LinearLayoutManager(CheckoutActivity.this));
        rv_deliveryslots.setAdapter(deliverySlotsAdapter);

2 个答案:

答案 0 :(得分:0)

我认为您的适配器很好。但是,在getItemCount函数中,您需要检查null。我对适配器进行了如下修改,让我知道它是否有效。

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

    private Context context;
    LayoutInflater layoutInflater;
    List<Object> objects;
    private LayoutInflater inflater;
    private CallbackListener.SimpleCallback listener;

    public DeliverySlotsAdapter(Context context, List<Object> objects) {
        this.context = context;
        this.objects = objects;
        this.inflater = LayoutInflater.from(context);
    }

    public void setListener(CallbackListener.SimpleCallback listener) {
        this.listener = listener;
    }

    @Override
    public ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
        RecyclerView.ViewHolder viewHolder;
        View view = inflater.inflate(R.layout.item_checkout_delivery_slots, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        holder.bind(objects.get(position));
    }

    @Override
    public int getItemCount() {
        return objects != null && objects.size() > 0 ? objects.size() : 0;
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.tvDeliveryScheduleLabel)
        TextView tvDeliveryScheduleLabel;

        public ViewHolder(View itemView) {
            super(itemView);

            itemView.setOnClickListener(v -> {
                if (listener != null && getAdapterPosition() != RecyclerView.NO_POSITION) {
                    listener.onItemClick(objects.get(getAdapterPosition()));
                }
            });
        }

        public void bind(Object object) {
            DeliverySlotItem deliverySlotItem = (DeliverySlotItem) object;
            tvDeliveryScheduleLabel.setText(deliverySlotItem.shop_name + " Delivery");
        }
    }
}

答案 1 :(得分:0)

在您的ViewHolder类中添加此更改-

function CalcularTotal () {
    var subtotal = 0;
    var total = 0;
    $("#tPedidos TBODY TR").each(function () {
            var row = $(this);

            if($(this) != $("#tPedidos TBODY TR:contains('Agregar otro Producto')")){
               Precio = row.find("TD").eq(1).find('input').val();
               CantidadPedido = row.find("TD").eq(2).find('input').val();
               subtotal = Precio * CantidadPedido;
               total += Number(subtotal);
               console.log(total);           
            }     
        });

        $("#tot").val(total);     
}