Recyclerview не показывает предметы? - PullRequest
2 голосов
/ 14 октября 2019

Я хочу отобразить макет ниже на RecyclerView. Этот макет дублируется в зависимости от количества магазинов. Допустим, у нас есть 2 магазина, поэтому пользователь увидит два макета этого с разными названиями магазинов.

imageitem_checkout_delivery_slots 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 получает название магазина, но со следующим кодом возвращает ноль:

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 голосов
/ 14 октября 2019

Добавьте в свой класс ViewHolder эти изменения -

    public ViewHolder(View itemView) {
                super(itemView);
                ButterKnife.bind(this, view);  // To bind view with ButterKnife

                itemView.setOnClickListener(v -> {
                    if (listener != null && getAdapterPosition() != RecyclerView.NO_POSITION) {
                        listener.onItemClick(objects.get(getAdapterPosition()));
                    }
                });
     }
0 голосов
/ 14 октября 2019

Я думаю, что ваш адаптер в порядке. Однако в функции 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");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...