【发布时间】:2019-10-14 03:19:06
【问题描述】:
我想在RecyclerView 上显示下面的布局。此布局根据商店的数量重复。假设我们有 2 家商店,那么用户将看到这两种布局,具有不同的商店名称。
适配器类:
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);
【问题讨论】:
-
您应该将
objects参数的类型转换为使用您的类型,而不是通用的Object类。 (基本上List<Object>变成了List<DeliverySlotItem>)
标签: java android android-recyclerview