> 文档中心 > 鸿蒙大作业

鸿蒙大作业

介绍:在日历上添加日程,将当日日程生成卡片到桌面

1.新建卡片页面

resources-base-layout下会生成默认卡片布局页面:form_image_with_info_widget_2_2和卡片布局页面:form_image_with_info_widget_2_4。

2.在WidgetImpl.java文件中进行卡片页面初始化

public ProviderFormInfo bindFormData() {
       HiLog.info(TAG, "bind form data when create form");
       ProviderFormInfo providerFormInfo = new ProviderFormInfo(RESOURCE_ID_MAP.get(dimension), context);
       String scheduleData = StorageUtil.initPreferences(context).getSchedule();
       if(!"".equals(scheduleData)) {
           ZSONArray array = ZSONArray.stringToZSONArray(scheduleData);
           if(array.size()>0) {
               // ComponentProvider表示Java卡片
               ComponentProvider componentProvider = new ComponentProvider();
               providerFormInfo.mergeActions(getFormDataCreate(array,context,dimension,componentProvider));

           }
       }

       return providerFormInfo;
   }
public static ComponentProvider getFormDataCreate(ZSONArray array,Context context,int dimension,ComponentProvider componentProvider){
       componentProvider.setVisibility(ResourceTable.Id_count, Text.VISIBLE);
       componentProvider.setText(ResourceTable.Id_count, array.size()+"");

       ZSONArray result = StorageUtil.getCurrentCardSchedule(array);
       ZSONObject schedule_current = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(0)));
       if(schedule_current != null){
           componentProvider.setText(ResourceTable.Id_time, schedule_current.getString("startCardShow")+"-"+schedule_current.getString("endCardShow"));
           componentProvider.setText(ResourceTable.Id_schedule, schedule_current.getString("title"));
       }
       if (dimension == DEFAULT_DIMENSION_2X2) {
           componentProvider.setIntentAgent(ResourceTable.Id_layout, getStartAbilityIntentAgent(context));
       }

       if (dimension == DIMENSION_2X4) {
           componentProvider.setVisibility(ResourceTable.Id_noschedule, Text.HIDE);
           ZSONObject schedule_1 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(1)));
           if(schedule_1 != null){
//                componentProvider.setText(ResourceTable.Id_time1, schedule_1.getString("startCardShow")+"-"+schedule_1.getString("endCardShow"));
               componentProvider.setText(ResourceTable.Id_schedule1, schedule_1.getString("title"));
           }

           ZSONObject schedule_2 = null;
           if(result.get(2) != null){
               schedule_2 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(2)));
           }
           if(schedule_2 != null){
               componentProvider.setVisibility(ResourceTable.Id_line, Text.VISIBLE);
//                componentProvider.setText(ResourceTable.Id_time2, schedule_2.getString("startCardShow")+"-"+schedule_2.getString("endCardShow"));
               componentProvider.setText(ResourceTable.Id_schedule2, schedule_2.getString("title"));
           }
       }

       if (dimension == DIMENSION_2X4) {
           componentProvider.setIntentAgent(ResourceTable.Id_more, getStartAbilityIntentAgent(context));
       }
       return componentProvider;
   }

3.更新页面

1)配置定时刷新

public void updateFormData(long formId, Object... vars) {
       HiLog.info(TAG, "update form data timing, default 30 minutes");

       String scheduleData = StorageUtil.initPreferences(context).getSchedule();
       if(!"".equals(scheduleData)) {
           ZSONArray array = ZSONArray.stringToZSONArray(scheduleData);
           if(array.size()>0) {
               ComponentProvider componentProvider =
                       new ComponentProvider(RESOURCE_ID_MAP.get(dimension), context);
               try {
                   ((MainAbility)context).updateForm(formId, getFormDataUpdate(array,context,dimension,componentProvider));
               } catch (FormException e) {
                   HiLog.error(TAG, e.toString());
               }

           }
       }

   }
public static ComponentProvider getFormDataUpdate(ZSONArray array,Context context,int dimension,ComponentProvider componentProvider){

       componentProvider.setVisibility(ResourceTable.Id_count, Text.VISIBLE);
       componentProvider.setText(ResourceTable.Id_count, array.size()+"");

       ZSONArray result = StorageUtil.getCurrentCardSchedule(array);
       ZSONObject schedule_current = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(0)));
       if(schedule_current != null){
           componentProvider.setText(ResourceTable.Id_time, schedule_current.getString("startCardShow")+"-"+schedule_current.getString("endCardShow"));
           componentProvider.setText(ResourceTable.Id_schedule, schedule_current.getString("title"));
       }

       if (dimension == DIMENSION_2X4) {
           componentProvider.setVisibility(ResourceTable.Id_noschedule, Text.HIDE);
           ZSONObject schedule_1 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(1)));
           if(schedule_1 != null){
//                componentProvider.setText(ResourceTable.Id_time1, schedule_1.getString("startCardShow")+"-"+schedule_1.getString("endCardShow"));
               componentProvider.setText(ResourceTable.Id_schedule1, schedule_1.getString("title"));
           }

           ZSONObject schedule_2 = null;
           if(result.get(2) != null){
               schedule_2 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(2)));
           }
           if(schedule_2 != null){
               componentProvider.setVisibility(ResourceTable.Id_line, Text.VISIBLE);
//                componentProvider.setText(ResourceTable.Id_time2, schedule_2.getString("startCardShow")+"-"+schedule_2.getString("endCardShow"));
               componentProvider.setText(ResourceTable.Id_schedule2, schedule_2.getString("title"));
           }
       }

       return componentProvider;
   }

2)数据更新

try {
           for(long id:formControllerManager.getAllFormIdFromSharePreference(CardConstant.JAVA_CARD_FORMS_NAME)) {
               int dimension = formControllerManager.getDimension(id+"");

               ComponentProvider componentProvider =
                   new ComponentProvider(Javacard2x4Impl.RESOURCE_ID_MAP.get(dimension), this);
               updateForm(id, Javacard2x4Impl.getFormDataUpdate(array,this,dimension,componentProvider));//上一步中有此方法代码
           }
       } catch (FormException e) {
           e.printStackTrace();
       }
 

4.点击事件添加

private static IntentAgent getStartAbilityIntentAgent(Context context) {
       Intent intent = new Intent();
       Operation operation = new Intent.OperationBuilder()
               .withDeviceId("")
               .withBundleName("com.example.myohoscard")
               .withAbilityName("com.example.myohoscard.MainAbility")
               .build();
       intent.setOperation(operation);
       List intentList = new ArrayList();
       intentList.add(intent);
       List flags = new ArrayList();
       flags.add(IntentAgentConstant.Flags.UPDATE_PRESENT_FLAG);
       IntentAgentInfo paramsInfo =
               new IntentAgentInfo(200, IntentAgentConstant.OperationType.START_ABILITY, flags, intentList, null);
       return IntentAgentHelper.getIntentAgent(context, paramsInfo);
   }

效果: