android studio中使用recyclerview制作個顯示考勤打卡的日歷來


 

1. 用戶在app端選擇個日期就能查詢這個月的考勤打卡信息,並以日歷上標注不同的顏色來顯示給用戶,當然這個日歷是recyclerview做出來的,只是每行顯示7個,表示一周的七天.

2. 員工考勤打卡的數據獲取與分析都是在服務器端完成的,通過app端傳入的日期和用戶名,來完成用戶考勤的提取分析,並把結果返回給app,使用webservice.

3.在app端把數據和recyclerview進行綁定,對不同的結果使用不同的顏色,就這樣了,結果還不錯.

里面最關鍵的部分是1. 計算選擇的日期下當月有多少天.   2.當月第一天是星期幾,效果圖如下,還需要慢慢完善,下圖是2017年7月份

知道了這兩個就能在.net端方便的組裝出日歷的數據和第一行的偏移來了,具體的時間分析及返回值,按自己的想法設計就行了,我是返回個簡單的字符串.代碼如下.

        Dim month As String = CDate(Sdate).Month
        Dim Year As String = CDate(Sdate).Year
        Dim Days As Integer = Date.DaysInMonth(Year, month)
        Dim Szd As String = hr.GetGS(yhm)
        Dim Str As String = ""
        Dim img As String
        Dim K_RQ As String = Year & "-" & month & "-" & "1"
        Dim K_week As Integer = CDate(K_RQ).DayOfWeek    '本月第一天是星期幾


        Dim Dt As DataTable = New DataTable
        Dt.Columns.Add("日期")
        Dt.Columns.Add("分析")

        For i = 1 To K_week
            Dim dr As DataRow = Dt.NewRow
            dr.Item(0) = ""
            dr.Item(1) = "1-0"
            Dt.Rows.Add(dr)
        Next

        For i = 1 To Days
            RQ = Year & "-" & month & "-" & i
            img = KQ_Fenxi(RQ, name, Szd)
            Dim dr As DataRow = Dt.NewRow
            dr.Item(0) = i
            dr.Item(1) = img
            Dt.Rows.Add(dr)
        Next

        Str = OA.DataTable2Json(Dt)
        Return Str

  

在進行測試時返回值如下,把這個json傳到app端進行數據綁定就行了

<string xmlns="http://tempuri.org/">
[{"日期":"1","分析":"1-0"},{"日期":"2","分析":"1-1"},{"日期":"3","分析":"1-1"},{"日期":"4","分析":"1-1"},{"日期":"5","分析":"1-2"},{"日期":"6","分析":"1-1"},{"日期":"7","分析":"1-1"},{"日期":"8","分析":"1-0"},{"日期":"9","分析":"1-1"},{"日期":"10","分析":"1-1"},{"日期":"11","分析":"1-1"},{"日期":"12","分析":"1-1"},{"日期":"13","分析":"1-1"},{"日期":"14","分析":"1-1"},{"日期":"15","分析":"1-0"},{"日期":"16","分析":"1-3"},{"日期":"17","分析":"1-1"},{"日期":"18","分析":"1-1"},{"日期":"19","分析":"1-1"},{"日期":"20","分析":"1-1"},{"日期":"21","分析":"1-3"},{"日期":"22","分析":"1-0"},{"日期":"23","分析":"1-0"},{"日期":"24","分析":"1-1"},{"日期":"25","分析":"1-1"},{"日期":"26","分析":"1-1"},{"日期":"27","分析":"1-1"},{"日期":"28","分析":"1-1"},{"日期":"29","分析":"1-0"},{"日期":"30","分析":"1-1"},{"日期":"31","分析":"1-1"}]
</string>

 

接下來是在andriod studio中的關鍵部分了,代碼如下:

private  void LoadData(String MethodName,String cs1,String cs2){
        try{
            WebService ws = new WebService(MethodName,cs1,cs2, "");
            ws.execute();
            Log.e("KQ-rq",cs1);
            Log.e("KQ-uid",cs2);
            ws.setOnAsyRes(new AsyRes() {
                @Override
                public void onDateRec(String msg) {
                    String jsonStr;
                    jsonStr=msg;
                    Log.e("KQ-str",msg);

                      try {
                        mDatas=new ArrayList<FileList>();
                        FileList map;
                        JSONArray jsonArray = new JSONArray(jsonStr);
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            map=new FileList(jsonObject.getString("日期"),jsonObject.getString("分析"));
                            mDatas.add(map);
                        }
                          myKqAdapter recycler=new myKqAdapter(getActivity(),mDatas);
                          RecyclerView recyclerView=(RecyclerView) vi.findViewById(R.id.lv_list);
                          //LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
                          GridLayoutManager girdManger=new GridLayoutManager(getActivity(),7);
                          recyclerView.setLayoutManager(girdManger);
                          //如果可以確定每個item的高度是固定的,設置這個選項可以提高性能
                          recyclerView.setHasFixedSize(true);
                          //創建並設置Adapter
                          recyclerView.addItemDecoration(new myItemDec()); //增加分隔線
                          recyclerView.setAdapter(recycler);
                          recyclerView.setItemAnimator(new DefaultItemAnimator());


                    } catch (JSONException e) {

                    }
                }
            });
        }catch (Exception e) {

        }
    }

  

增加上log.e,主要是查看一下發送的參數和返回的結果是否正確,紅色的代碼就是為了讓recyclerview每行顯示七個

在自定義的數據適配器中,我們分析返回的結果,根據結果設置不同的背景色.

 public void onBindViewHolder(MyViewHolder holder, final int position) {
        FileList da=mDatas.get(position);
        //holder.v.setBackgroundColor(Color.WHITE);
        String msg=da.getMsg();


        if (listener != null) {
            holder.v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onItemClick(v,position);
                }
            });
        }
       // holder.tv.setGravity(Gravity.CENTER_HORIZONTAL);//設置文字水平居中
        holder.tv.setText(da.getName());

       // holder.msg.setText("");
        if (msg.equals("1-1")){
            holder.v.setBackgroundColor(Color.GREEN);  //全天上班
        }
        if (msg.equals("1-2")){
            holder.v.setBackgroundColor(Color.YELLOW);//半天上班
        }
        if (msg.equals("1-3")){
            holder.v.setBackgroundColor(Color.YELLOW);//半天上班
        }
        if (msg.equals("1-0")){
            holder.v.setBackgroundColor(Color.WHITE);//全天休息

        }

    }

好了,基本上一個日歷型的考勤顯示界面就出來了,后邊你可以慢慢加上表頭,增加上點擊事件,用戶點擊時顯示詳細的打卡時間.

補充一個增加了點擊事件的效果圖吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM