【问题标题】:How to disable already booking slot in android如何在android中禁用已经预订的插槽
【发布时间】:2020-01-05 08:26:35
【问题描述】:

我必须禁用已经预订的时段并仅向用户显示可用的时段。 在回收站视图中,从上午 9:00 到晚上 9:00 可以看到时间。已预订的广告位应处于禁用模式,用户只能选择可用的广告位。

在主要活动中,我存储从上午 9:00 到晚上 09:00 的所有时间段并传递到适配器。

在适配器类中,我想从 firebase 获取预定的插槽并比较时间数组列表对象中的这些插槽。

getHourarray()

    ArrayList<TimeSlot>times = new ArrayList<TimeSlot>();

    String firstDate = "26/02/2019";
    String firstTime = "09:00 AM";
    String secondDate = "26/02/2019";
    String secondTime = "09:00 PM";

    String format = "hh:mm a";


    SimpleDateFormat sdf = new SimpleDateFormat(format);

    Date dateObj1 = null;
    try {
        dateObj1 = sdf.parse(firstTime);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Date dateObj2 = null;
    try {
        dateObj2 = sdf.parse(secondTime);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    System.out.println("Date Start: "+dateObj1);
    System.out.println("Date End: "+dateObj2);

    long dif = dateObj1.getTime();
    int i=0;
    while (dif < dateObj2.getTime()) {
        Date slot = new Date(dif);
        SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm a");
        TimeSlot t = new TimeSlot();
        t.time = String.valueOf(sdf1.format(slot));
        t.isAvailable = "Available";
        times.add(t);
        dif += 3600000;
    }

TimeSlot 模型类

 public class TimeSlot {

public String time;
public String isAvailable;

}

时间适配器

在适配器类中,它应该获取已经预订的插槽并与 arraylist 进行比较。如果已经预定的槽位等于arraylist时间,那么它应该是禁用模式其他槽位应该是启用模式

 public class TimeAdapter extends RecyclerView.Adapter<TimeAdapter.TimeViewHolder> {

private AdapterCallback mAdapterCallback;

IMethodCaller iMethodCaller;
ArrayList<TimeSlot> times;

private  Context context;
String start_time="";



public String getStart_time() {
    return start_time;
}





public void setStart_time(String start_time) {
    this.start_time = start_time;
}

public TimeAdapter( ArrayList<TimeSlot> times, Context context,IMethodCaller iMethodCaller) {
    this.iMethodCaller = iMethodCaller;
    this.times = times;
    this.context = context;
}

@Override
public TimeAdapter.TimeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.time_slot_layout, parent, false);
    TimeViewHolder viewHolder = new TimeViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(final TimeAdapter.TimeViewHolder holder, final int position) {



    holder.text_time.setText(times.get(position).getTime());
    holder.text_description.setText(times.get(position).getIsAvailable());


   int count=0;

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {



                holder.cardView.setCardBackgroundColor(context.getResources().getColor(android.R.color.darker_gray));

                holder.text_description.setTextColor(context.getResources()
                        .getColor(android.R.color.white));
                holder.text_time.setTextColor(context.getResources().getColor(android.R.color.white));
                start_time = times.get(position).toString();


            iMethodCaller.getTimefromAdapter(times.get(position));


        }
    });


}

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

public static class TimeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private ItemClickListener itemClickListener;

    protected TextView text_time,text_description;


    protected CardView cardView;

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




        cardView=(CardView)itemView.findViewById(R.id.card_time_slot); 
        text_time = (TextView) itemView.findViewById(R.id.time_slot);

        text_description=(TextView)itemView.findViewById(R.id.txt_time_slot_description);

        itemView.setOnClickListener(this);




    }



    @Override
    public void onClick(View v) {

        itemClickListener.onClick(v, getAdapterPosition(), false);

    }

}

 }

【问题讨论】:

  • 您正在使用 firestore 作为数据库?
  • @Haresh Firebase 数据库不是 Firestore

标签: android firebase firebase-realtime-database android-recyclerview


【解决方案1】:

整个实用可能是不可能的,但我可以告诉你如何做到这一点。您可以做的只是在用户单击任何插槽时更新字段 isAvailable="false" 。例如,用户 1 拥有所有 10 个可用插槽,他当时选择了第一个,您必须使用 isAvailable="false" 更新该节点,当用户 2 来自 firbase 查询时,只有那些 isAvailable 值为 true 的结果。通过这种方式,您无需处理时间段的问题。

【讨论】:

  • 再次感谢@Haresh,我已经实施了你的解决方案一半,会告诉你
  • 已经完成了。你的解决方案对我有用@Haresh 非常感谢。
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 2018-11-17
  • 2020-09-08
  • 2014-05-22
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多