网上挂号V1.0
来源:互联网 发布:淘宝伊舜数码靠谱吗 编辑:程序博客网 时间:2024/05/17 07:58
网上预约挂号系统
今天来完成选择医生挂号和选择时间段挂号,查看医生详情界面,上个月状态不是很好,今天来写写博客,记录一下。
- 云数据库
因为之前写了星期选择器,所以我的数据库表有七天中每一天的表,或者你可以取最近十天日期,然后建十天星期的表,这样的话,在后面判断每天拿数据的逻辑可能会清晰方便些。看看我的数据库就知道了,可能设计的不是很好
周一的数据,填入医生每一个时间段外键 和该时间段的号数,到时使用原子计数器加减一个号,另外六天类似
public class Mon extends BmobObject { private Integer m_count; private Doctor m_d; private TimeDuan m_t; private String md;}
时间段的表 数据类似:Mcyf222e 09:00 08:30 b t02.png(时间段的图片)
public class TimeDuan extends BmobObject { private String t_code; private String t_end; private String t_start; private BmobFile td_icon;}
为了偷懒就写了一个周的排班表,放当天总号数(使用原子计数器加减一个号),判断当天有没上班
public class Week { private Integer w_c7; private Integer w_c4; private Integer w_c3; private Integer w_c2; private Integer w_c1; private Integer w_c6; private Integer w_c5; private boolean w_sun; private boolean w_sat; private boolean w_fri; private boolean w_thur; private boolean w_weds; private boolean w_tues; private boolean w_mon; private Doctor w_doctor;}
选择医生界面 (SelectedDepaertmentDateActivity)
这里有三种状态:
(1)有数据,就是有当天值班医生
(2)暂无可挂医生\n请选择其他日期
(3)已经超过当天挂号时间\n不可再挂当天的号,这个状态只需要第一天去判断就可以工具类(参考网上的,忘了是哪位的了)
调用
Dateutil.isCurrentInTimeScope(16,0,0,0);
/** * 判断当前系统时间是否在指定时间的范围内 * * @param beginHour * 开始小时,例如22 * @param beginMin * 开始小时的分钟数,例如30 * @param endHour * 结束小时,例如 8 * @param endMin * 结束小时的分钟数,例如0 * @return true表示在范围内,否则false */ public static boolean isCurrentInTimeScope(int beginHour, int beginMin, int endHour, int endMin) { boolean result = false; final long aDayInMillis = 1000 * 60 * 60 * 24; final long currentTimeMillis = System.currentTimeMillis(); Time now = new Time(); now.set(currentTimeMillis); Time startTime = new Time(); startTime.set(currentTimeMillis); startTime.hour = beginHour; startTime.minute = beginMin; Time endTime = new Time(); endTime.set(currentTimeMillis); endTime.hour = endHour; endTime.minute = endMin; if (!startTime.before(endTime)) { // 跨天的特殊情况(比如22:00-8:00) startTime.set(startTime.toMillis(true) - aDayInMillis); result = !now.before(startTime) && !now.after(endTime); // startTime <= now <= endTime Time startTimeInThisDay = new Time(); startTimeInThisDay.set(startTime.toMillis(true) + aDayInMillis); if (!now.before(startTimeInThisDay)) { result = true; } } else { // 普通情况(比如 8:00 - 14:00) result = !now.before(startTime) && !now.after(endTime); // startTime <= now <= endTime } return result; }
因为观察者拿到数据后要在onNext中设置界面,所以对Week的每一天判断都在这个界面,不知道能否写成工具类。
public class Weekutil { /** * 返回一个科的所有医生的一周排班表 * @return */ public static Observable<List<Week>> getWeek(final String did){ return Observable.create(new Observable.OnSubscribe<List<Week>>() { @Override public void call(final Subscriber<? super List<Week>> subscriber) { if(!subscriber.isUnsubscribed()){ BmobQuery<Week> query = new BmobQuery<Week>(); BmobQuery<Doctor> innerQuery = new BmobQuery<Doctor>(); innerQuery.addWhereEqualTo("d_dcode", did); query.addWhereMatchesQuery("w_doctor", "Doctor", innerQuery); query.include("w_doctor"); Observable<List<Week>> observable = query.findObjectsObservable(Week.class); observable.subscribe(new Subscriber<List<Week>>() { @Override public void onCompleted() { } @Override public void onError(Throwable throwable) { } @Override public void onNext(List<Week> weeks) { subscriber.onNext(weeks); } }); } } }); }}
这里使用了designer的CoordinatorLayout,这里判断哪一天是在我的星期选择器中拿到对应天数的集合去判断就可以了
public class SelectedDepaertmentDateActivity extends AppCompatActivity { @BindView(R.id.wsv) WeekSelectedView wsv; @BindView(R.id.rv) RecyclerView rv; private Context context; @BindView(R.id.none) CardView nonecd; @BindView(R.id.out) CardView outcd; String mday; String dname; String bdname; public Context getContext() { context = SelectedDepaertmentDateActivity.this; return context; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_selecteddepaertmentdate); ButterKnife.bind(this); initToolbar(); initWeek(); } /** * 判断是否为四点后 */ private boolean isInTime() { return Dateutil.isCurrentInTimeScope(16,0,0,0); } private void setTimeOut(){ outcd.setVisibility(View.VISIBLE); nonecd.setVisibility(View.GONE); rv.removeAllViews(); } /** * 初始化week的数据 */ private void initWeek() { final String first = wsv.getFirst(); Log.i("第一天",first+""); if(isInTime()){ setTimeOut(); }else { getDayDoctor(first); } wsv.setOnItemClickListener(new WeekSelectedView.OnItemClickListener() { @Override public void onItemClick(View v, String day, int dayNum, String date) { clear(); clearView(); if(day == first){ if(isInTime()){ setTimeOut(); }else { getDayDoctor(first); } }else { getDayDoctor(day); } } }); } private void initToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("选择医生挂号"); setSupportActionBar(toolbar); //关键下面两句话,设置了回退按钮,及点击事件的效果 getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } //医生列表 final List<Doctor> doctorList = new ArrayList<Doctor>(); final List<Integer> ilist = new ArrayList<Integer>(); public void getDayDoctor(final String day){ //获取具体的科室 Intent intent = getIntent(); final String did = intent.getStringExtra("did"); getWeek(did).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<List<Week>>() { @Override public void onCompleted() { } @Override public void onError(Throwable throwable) { } @Override public void onNext(List<Week> weeks) { for(Week week:weeks){ //判断该医生周几是否上班 //周几有上班就查出该数据 switch (day){ case "周一": if(week.isW_mon()){ Doctor doctor = week.getW_doctor(); doctorList.add(doctor); int wc1 = week.getW_c1(); ilist.add(wc1); }else { if (outcd.getVisibility() != View.VISIBLE){ nonecd.setVisibility(View.VISIBLE); } } mday = "周一"; break; case "周二": if(week.isW_tues()){ Doctor doctor = week.getW_doctor(); doctorList.add(doctor); int wc2 = week.getW_c2(); ilist.add(wc2); }else { if (outcd.getVisibility() != View.VISIBLE){ nonecd.setVisibility(View.VISIBLE); } } mday = "周二"; break; case "周三": if(week.isW_weds()){ Doctor doctor = week.getW_doctor(); doctorList.add(doctor); int wc3 = week.getW_c3(); ilist.add(wc3); }else { if (outcd.getVisibility() != View.VISIBLE){ nonecd.setVisibility(View.VISIBLE); } } mday = "周三"; break; case "周四": if(week.isW_thur()){ Doctor doctor = week.getW_doctor(); doctorList.add(doctor); int wc4 = week.getW_c4(); ilist.add(wc4); }else { if (outcd.getVisibility() != View.VISIBLE){ nonecd.setVisibility(View.VISIBLE); } } mday = "周四"; break; case "周五": if(week.isW_fri()){ Doctor doctor = week.getW_doctor(); doctorList.add(doctor); int wc5 = week.getW_c5(); ilist.add(wc5); }else { if (outcd.getVisibility() != View.VISIBLE){ nonecd.setVisibility(View.VISIBLE); } } mday = "周五"; break; case "周六": if(week.isW_sat()){ Doctor doctor = week.getW_doctor(); doctorList.add(doctor); int wc6 = week.getW_c6(); ilist.add(wc6); }else { if (outcd.getVisibility() != View.VISIBLE){ nonecd.setVisibility(View.VISIBLE); } } mday = "周六"; break; case "周日": if(week.isW_sun()){ Doctor doctor = week.getW_doctor(); doctorList.add(doctor); int wc7 = week.getW_c7(); ilist.add(wc7); }else { if (outcd.getVisibility() != View.VISIBLE){ nonecd.setVisibility(View.VISIBLE); } } mday = "周日"; break; } } Log.i("两医生",""+doctorList+ilist+""+weeks); setRv(); } }); } /** * 配置rv */ public void setRv(){ DayDoctorAdapter adapter; LinearLayoutManager layoutManager = new LinearLayoutManager(SelectedDepaertmentDateActivity.this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); adapter = new DayDoctorAdapter(SelectedDepaertmentDateActivity.this,doctorList,ilist); Log.i("适配器",adapter+""); adapter.notifyDataSetChanged(); //在这里设置rv的item点击 adapter.setOnItemClickListener(new DayDoctorAdapter.MyItemClickListener() { @Override public void onItemClick(View view, final int postion) { //在这里先查数据去传给下一个界面就不会出现在查数据的卡顿 final Doctor doctor = doctorList.get(postion); final Intent intent = new Intent(SelectedDepaertmentDateActivity.this,SelectedTimeDuanActivity.class); final String title = doctorList.get(postion).getD_titles(); final String name = doctorList.get(postion).getD_name(); final String id = doctorList.get(postion).getD_dcode().getObjectId(); final String url = doctorList.get(postion).getD_photo().getFileUrl(); intent.putExtra("tdid",doctorList.get(postion).getObjectId()); intent.putExtra("day",mday); intent.putExtra("name",name); intent.putExtra("title",title); intent.putExtra("url",url); intent.putExtra("doctor",doctor); BmobQuery<Department> query = new BmobQuery<Department>(); query.include("d_bigdepartmentcode"); Observable<Department> observable = query.getObjectObservable(Department.class,id); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Department>() { @Override public void onCompleted() { } @Override public void onError(Throwable throwable) { } @Override public void onNext(Department department) { dname = department.getD_departmentname(); BigDepartment bd = department.getD_bigdepartmentcode(); bdname = bd.getBd_name(); Log.i("查到的",dname+bdname+""); intent.putExtra("dname",dname); intent.putExtra("bdname",bdname); Log.i("点击的天数是",mday+""+name + title + id + url + dname + bdname); startActivity(intent); } }); } }); rv.setLayoutManager(layoutManager); rv.setAdapter(adapter); } public void clear(){ doctorList.clear(); rv.removeAllViews(); ilist.clear(); } public void clearView(){ nonecd.setVisibility(View.GONE); outcd.setVisibility(View.GONE); }}
- 选择时间段挂号(SelectedTimeDuanActivity)
第一个CardView直接拿上个界面传来的数据设置就可以了
那个日期选择就比较麻烦了,从上个界面传来星期几就显示星期几,并将下面的recycleView去设置对应当天的数据
这里就没去写一个自定义控件,需要去处理第一天往左点是没数据的和第七天往右点也是没数据的
/** * 星期选择器选中某天 对应显示某一天并且将数据初始化 */ private static List<String> WEEK_STR; //当前一周7天的日期,这个是已经知道的 private static List<String> DATE_STR; private String selected; private void initDateSelect() { DATE_STR = new Dateutil().getSevenDate(7); WEEK_STR = new Dateutil().getWeek(DATE_STR); Intent intent = getIntent(); final String day = intent.getStringExtra("day"); selected = day; int index = WEEK_STR.indexOf(day); String d = DATE_STR.get(index); selected = day; date.setText(d+selected); rvtimeduan.setVisibility(View.VISIBLE); fl.setVisibility(View.GONE); getDay(day); } @OnClick(R.id.iv_left) public void left(){ clear(); int index = WEEK_STR.indexOf(selected); //如果等于0,第一页点击左边显示没数据并且设置为不可点击 if(index == 0){ Toast.makeText(SelectedTimeDuanActivity.this,"请您选择其他日期",Toast.LENGTH_SHORT).show(); date.setText("没有更多数据了"); fl.setVisibility(View.VISIBLE); rvtimeduan.setVisibility(View.GONE); leftImageView.setEnabled(false); }else{ rightImageView.setEnabled(true); //当当前index=6,判断是没有数据状态还是有数据状态 //没有更多数据了状态 if(rvtimeduan.getVisibility() == View.GONE){ leftImageView.setEnabled(true); rvtimeduan.setVisibility(View.VISIBLE); fl.setVisibility(View.GONE); String d = DATE_STR.get(index); String day = WEEK_STR.get(index); selected = day; date.setText(d+selected); getDay(day); }else { String d = DATE_STR.get(index - 1); String day = WEEK_STR.get(index - 1); selected = day; date.setText(d+selected); getDay(day); } } } @OnClick(R.id.iv_right) public void right(){ clear(); int index2 = WEEK_STR.indexOf(selected); if(index2 == 6){ Toast.makeText(SelectedTimeDuanActivity.this,"请您选择其他日期",Toast.LENGTH_SHORT).show(); date.setText("没有更多数据了"); fl.setVisibility(View.VISIBLE); rvtimeduan.setVisibility(View.GONE); rightImageView.setEnabled(false); }else{ leftImageView.setEnabled(true); //当当前index=6,判断是没有数据状态还是有数据状态 //没有更多数据了状态 if(rvtimeduan.getVisibility() == View.GONE){ rightImageView.setEnabled(true); rvtimeduan.setVisibility(View.VISIBLE); fl.setVisibility(View.GONE); String d = DATE_STR.get(index2); String day = WEEK_STR.get(index2); selected = day; date.setText(d+selected); getDay(day); }else { String d = DATE_STR.get(index2 + 1); String day = WEEK_STR.get(index2 + 1); selected = day; date.setText(d+selected); getDay(day); } } }
/** * 查询医生的当天所有可以挂号时间段 * @return */ public void getDay(String day) { Intent intent = getIntent(); final String did = intent.getStringExtra("tdid"); switch (day){ case "周一": setMon(did); break; case "周二": setTue(did); break; case "周三": setWeds(did); break; case "周四": setThur(did); break; case "周五": setFri(did); break; case "周六": setSat(did); break; case "周日": setSun(did); break; } }
这里示例周一的查询,其他类似
观察者接收数据(放在SelectedTimeDuanActivity)
setRv()设置适配器很简单就不贴了
//挂号详情 final List<String> moneyList = new ArrayList<String>(); final List<String> urlList = new ArrayList<String>(); /** * 观察者获取被观察者的数据 周一 * @param did */ public void setMon(String did){ getAllMon(did) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<List<Mon>>() { @Override public void onCompleted() { } @Override public void onError(Throwable throwable) { } @Override public void onNext(List<Mon> mons) { for(Mon mon:mons){ Doctor doctor = mon.getM_d(); TimeDuan timeDuan = mon.getM_t(); String url = timeDuan.getTd_icon().getFileUrl(); String money = doctor.getD_money()+""; moneyList.add(money); urlList.add(url); Log.i("医生挂号详情-->>链接",moneyList+"" +urlList); } setRv(); } }); }
观察者 Monutil,因为每一天对应字段不一样,所以就只能一天天写工具类
/** * 返回周一的一个医生所有的时间段 * @return */ public static Observable<List<Mon>> getAllMon(final String did){ return Observable.create(new Observable.OnSubscribe<List<Mon>>() { @Override public void call(final Subscriber<? super List<Mon>> subscriber) { if(!subscriber.isUnsubscribed()){ BmobQuery<Mon> query = new BmobQuery<Mon>(); Doctor doctor = new Doctor(); doctor.setObjectId(did); query.addWhereEqualTo("m_d", new BmobPointer(doctor)); query.include("m_d,m_t"); Observable<List<Mon>> observable = query.findObjectsObservable(Mon.class); observable.subscribe(new Subscriber<List<Mon>>() { @Override public void onCompleted() { } @Override public void onError(Throwable throwable) { } @Override public void onNext(List<Mon> mons) { subscriber.onNext(mons); } }); } } }); }
传数据给下一个界面
@OnClick(R.id.ra) public void rarrow(){ setData(); Intent intent = new Intent(SelectedTimeDuanActivity.this,SelectedDoctorDetailActivity.class); intent.putExtra("doctor", mDoctor); intent.putExtra("mbdname",mbdname); intent.putExtra("mdname",mdname); Log.i("名字","" + mDoctor+mbdname); startActivity(intent); }
医生详情页 (SelectedDoctorDetailActivity)
xml文件
<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="300dp" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:collapsedTitleTextAppearance="@style/ToolBar.TitleText" app:contentScrim="?attr/colorPrimary" app:expandedTitleTextAppearance="@style/CollapsingToolbarTitleStyle.About" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <LinearLayout android:id="@+id/user_appbar_container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:fitsSystemWindows="true" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/user_pic" android:layout_width="match_parent" android:layout_height="180dp" android:background="@drawable/yfy" /> <LinearLayout android:id="@+id/wll" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="bottom" android:layout_marginRight="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="235dp" android:background="@color/white" android:gravity="center_vertical" android:orientation="vertical"> <LinearLayout android:layout_marginRight="10dp" android:layout_marginLeft="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:text="吴伟" android:id="@+id/detail_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" android:textColor="@color/font_normal" android:textSize="18sp" /> <Space android:layout_width="5dp" android:layout_height="wrap_content" /> <ImageView android:id="@+id/user_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_margin="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" > <TextView android:text="职称" android:id="@+id/tv_follow_users" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="5dp" android:clickable="true" android:gravity="center" android:textColor="@color/font_normal" android:textSize="14sp" /> <TextView android:id="@+id/detail_titles" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="10dp" android:background="?attr/selectableItemBackground" android:clickable="true" android:gravity="center" android:text="主任医生" android:textColor="@color/black_alpha_45" android:textSize="14sp" /> <TextView android:text="好评度" android:id="@+id/tv_fans" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginEnd="10dp" android:clickable="true" android:gravity="center" android:textColor="@color/font_normal" android:textSize="14sp" /> <TextView android:id="@+id/detail_like" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?attr/selectableItemBackground" android:clickable="true" android:gravity="center" android:text="100" android:textColor="@color/black_alpha_45" android:textSize="14sp" /> </LinearLayout> </LinearLayout> <com.gzucm.wsyy.view.CircleImageView android:id="@+id/detail_head" android:layout_width="84dp" android:layout_height="84dp" android:layout_marginStart="10dp" android:layout_marginTop="138dp" app:border_color="@android:color/white" app:border_width="2dp" android:src="@drawable/my" /> </FrameLayout> </LinearLayout> <android.support.v7.widget.Toolbar android:id="@+id/detail_tb" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:minHeight="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:titleTextAppearance="@style/ToolBar.TitleText" /> </android.support.design.widget.CollapsingToolbarLayout> <View android:id="@+id/line" android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom" android:background="@color/gray" /> </android.support.design.widget.AppBarLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_marginTop="15dp" android:layout_marginLeft="18dp" android:textColor="@color/red" android:text="专长" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:background="@color/white" android:layout_marginTop="10dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:padding="8dp" android:textColor="@color/red" android:text="擅长:" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/detail_special" android:padding="8dp" android:textColor="@color/yellow" android:text="" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:layout_marginTop="15dp" android:layout_marginLeft="18dp" android:textColor="@color/red" android:text="挂号情况" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="10dp" android:background="@color/white" android:orientation="vertical"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/yellow" android:padding="8dp" android:text="广州中医药大学第一附属医院" android:textColor="@color/red" /> </android.support.v7.widget.CardView> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/gray" /> <TextView android:id="@+id/detail_department" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:text="" android:textColor="@color/yellow" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/gray" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_time" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </LinearLayout> </LinearLayout> </LinearLayout> </FrameLayout></android.support.design.widget.CoordinatorLayout>
CollapsingToolbarLayout的展开收起,这里新建了一个接口,在展开的时候toolbar的文字不会在页面上
public abstract class AppBarStateChangeEvent implements AppBarLayout.OnOffsetChangedListener { protected enum State { EXPANDED, COLLAPSED, IDLE } private State mCurrentState = State.IDLE; public abstract void onStateChanged(AppBarLayout appBarLayout, State state, int verticalOffset); @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == 0) { if (mCurrentState != State.EXPANDED) { onStateChanged(appBarLayout, State.EXPANDED, verticalOffset); } mCurrentState = State.EXPANDED; } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { if (mCurrentState != State.COLLAPSED) { onStateChanged(appBarLayout, State.COLLAPSED, verticalOffset); } mCurrentState = State.COLLAPSED; } else { if (mCurrentState != State.IDLE) { onStateChanged(appBarLayout, State.IDLE, verticalOffset); } mCurrentState = State.IDLE; } }}
private void initAppBarLayout(final String str) { setSupportActionBar(toolbar); mAppBarLayout.addOnOffsetChangedListener(new AppBarStateChangeEvent() { @Override public void onStateChanged(AppBarLayout appBarLayout, State state, int verticalOffset) { if (state == State.EXPANDED) { //展开状态 collapsingToolbar.setTitle(""); } else if (state == State.COLLAPSED) { //折叠状态 collapsingToolbar.setTitle(str); } else { collapsingToolbar.setTitle(""); } } }); }
这里拿到医生数据去设置数据,接着就得去拿到一周的总号数和日期
setRv()设置recycleView
public void getWeekDay() { //获取具体的科室 Intent intent = getIntent(); String id = doctor.getObjectId(); BmobQuery<Week> query = new BmobQuery<Week>(); Doctor doctor1 = new Doctor(); doctor1.setObjectId(id); query.addWhereEqualTo("w_doctor",new BmobPointer(doctor1)); query.include("w_doctor"); Observable<List<Week>> observable = query.findObjectsObservable(Week.class); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<Week>>() { @Override public void onCompleted() { Log.i("日期星期","日期星期完成"+datelist+daylist); } @Override public void onError(Throwable throwable) { Log.i("日期星期","日期星期错误"+datelist+daylist); } @Override public void onNext(List<Week> weeks) { Log.i("日期星期hhh","日期星期"+weeks); for(Week week:weeks){ for(int i = 0;i < daylist.size();i++){ switch (daylist.get(i)){ case "周一": int j = daylist.indexOf("周一"); if(week.isW_mon()){ String wc1 = week.getW_c1()+""; String time1 = datelist.get(j); timelist.add(time1); haolist.add(wc1); } break; case "周二": int j2 = daylist.indexOf("周二"); if(week.isW_tues()){ String wc2 = week.getW_c2()+""; String time2 = datelist.get(j2); timelist.add(time2); haolist.add(wc2); } break; case "周三": int j3 = daylist.indexOf("周三"); if(week.isW_weds()){ String wc3 = week.getW_c3()+""; String time3 = datelist.get(j3); timelist.add(time3); haolist.add(wc3); } break; case "周四": int j4 = daylist.indexOf("周四"); if(week.isW_thur()){ String wc4 = week.getW_c4()+""; String time4= datelist.get(j4); timelist.add(time4); haolist.add(wc4); } break; case "周五": int j5 = daylist.indexOf("周五"); if(week.isW_fri()){ String wc5 = week.getW_c5()+""; String time5 = datelist.get(j5); timelist.add(time5); haolist.add(wc5); } break; case "周六": int j6 = daylist.indexOf("周六"); if(week.isW_sat()){ String wc6 = week.getW_c6()+""; String time6 = datelist.get(j6); timelist.add(time6); haolist.add(wc6); } break; case "周日": int j7 = daylist.indexOf("周日"); if(week.isW_sun()){ String wc7 = week.getW_c7()+""; String time7 = datelist.get(j7); timelist.add(time7); haolist.add(wc7); } break; } } } setRv(); } }); }
适配器
public class WeekDayAdapter extends RecyclerView.Adapter<WeekDayAdapter.ViewHolder> { private List<String> mDates; private List<String> mDatehaos; private Context mContext; private ImageLoader imageLoader; public WeekDayAdapter(Context context, List<String> dates, List<String> datehaos) { this.mDates = dates; this.mDatehaos = datehaos; this.mContext = context; } public WeekDayAdapter(List<String> dates, List<String> datehaos) { this.mDates = dates; this.mDatehaos = datehaos; } //创建新View,被LayoutManager所调用 @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_doctor_hao,viewGroup,false); ViewHolder vh = new ViewHolder(view,mItemClickListener); return vh; } //将数据与界面进行绑定的操作 @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { viewHolder.date.setText(mDates.get(position)); viewHolder.datehao.setText(mDatehaos.get(position)); } //获取数据的数量 @Override public int getItemCount() { return mDatehaos.size(); } //自定义的ViewHolder,持有每个Item的的所有界面元素 public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private MyItemClickListener mListener; public TextView date; public TextView datehao; public ViewHolder(View view,MyItemClickListener listener){ super(view); this.mListener = listener; view.setOnClickListener(this); date = (TextView) view.findViewById(R.id.date); datehao = (TextView) view.findViewById(R.id.date_hao); } @Override public void onClick(View v) { if (mListener != null) { mListener.onItemClick(v, getLayoutPosition()); } } } public interface MyItemClickListener { void onItemClick(View view, int postion); } private MyItemClickListener mItemClickListener = null; public void setOnItemClickListener(MyItemClickListener listener) { this.mItemClickListener = listener; }}
后面就得写添加就诊人和挂号更新号数了
待续…
- 网上挂号V1.0
- 网上挂号V1.0之开始挂号
- 挂号系统 V1.0(上)
- 挂号系统 V1.0(下)
- 网上预约挂号之左右列表
- 网上前台客服系统 v1.0 绿色
- 挂号
- 吐槽网上挂号遇到的不方便的网页交互
- 基于C++与JS技术实现的网上挂号助手
- 网上广播电视台 v1.2 是什么
- 医院挂号
- 医院挂号
- V1.0
- icare3.0挂号时提示“该病人身份已停用”-------运维日志14
- 挂号控件 未完成版
- 下载挂号器
- UC挂号器
- 新浪uc挂号器
- springboot源码分析8-环境属性构造过程(下)
- RN中调用原生的分享功能(UIActivityViewController)
- 免费下载公众号jssdk文档,微信JSSDK开发文档下载
- git的push操作问题:error: unpack failed: error Missing tree
- @Repository、@Service、@Controller 和 @Component
- 网上挂号V1.0
- JAVE 视音频转码
- 千亿级服务器监控数据存储实践
- geode(三) region
- 新手村 简单字符串 数字反转(升级版)
- 程序员必备600词
- python自学笔记(1)--python入门第一课
- Tensorflow
- Java获取路径的几种方式