worklight 中添加时间控件

在我们使用worklight开发的过程中,由于文档的不开源和插件的缺少,总是自己琢磨很多东东,更有胜者

需要调用源代码实现某些不易实现的功能。在这里把实现的功能代码贴出来,如有不足之处还望指正!

实现的步骤就不多说了,上篇中已经解说

实现日期插件

  1 public class DatePickerPlugin extends CordovaPlugin {
  2 
  3         private static final CordovaActivity ctx = null;
  4         private static final String ACTION_DATE = "date";  
  5         private static final String ACTION_TIME = "time";
  6         
  7         @Override
  8         public boolean execute(String action, JSONArray args,
  9                 CallbackContext callbackContext) throws JSONException {
 10             Log.d("DatePickerPlugin", "Plugin Called");  
 11             PluginResult result = null;  
 12             if (ACTION_DATE.equalsIgnoreCase(action)) {  
 13                 Log.d("DatePickerPluginListener execute", ACTION_DATE);  
 14                 this.showDatePicker(callbackContext.getCallbackId(),callbackContext);  
 15                 result= new PluginResult(  
 16                         PluginResult.Status.NO_RESULT);  
 17                 result.setKeepCallback(true);  
 18             } else if (ACTION_TIME.equalsIgnoreCase(action)) {  
 19                 Log.d("DatePickerPluginListener execute", ACTION_TIME);  
 20                 this.showTimePicker(callbackContext.getCallbackId(),callbackContext);  
 21                 result = new PluginResult(  
 22                         PluginResult.Status.NO_RESULT);  
 23                 result.setKeepCallback(true);  
 24             } else {  
 25                 result = new PluginResult(Status.INVALID_ACTION);  
 26                 Log.d("DatePickerPlugin", "Invalid action : " + action + " passed");  
 27             }  
 28             return false;
 29         }
 30         /**
 31          * 时分实现
 32          * @param callBackId
 33          * @param callbackContext
 34          */
 35         public synchronized void showTimePicker(final String callBackId,final CallbackContext callbackContext) {  
 36             final Calendar c = Calendar.getInstance();  
 37             final int mWhen = c.get(Calendar.HOUR_OF_DAY);  
 38             final int mMin = c.get(Calendar.MINUTE);  
 39 
 40             final Runnable runnable = new Runnable() {  
 41                 public void run() {  
 42                     final TimePickerDialog tpd = new TimePickerDialog(cordova.getActivity(),  
 43                             new OnTimeSetListener() {  
 44       
 45                                 public void onTimeSet(final TimePicker view,  
 46                                         final int hourOfDay, final int minute) {  
 47                                     final JSONObject userChoice = new JSONObject();  
 48                                     try {  
 49                                         userChoice.put("hour", hourOfDay);  
 50                                         userChoice.put("min", minute);  
 51                                     } catch (final JSONException jsonEx) {  
 52                                         Log.e("showDatePicker",  
 53                                                 "Got JSON Exception "  
 54                                                         + jsonEx.getMessage());  
 55                                         callbackContext.sendPluginResult(new PluginResult(  
 56                                                 Status.JSON_EXCEPTION));
 57                                     }  
 58                                     callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 
 59                                             userChoice));
 60                                 }  
 61                             }, mWhen, mMin, true);  
 62       
 63                     tpd.show();  
 64                 }  
 65             };  
 66             this.cordova.getActivity().runOnUiThread(runnable); 
 67         }  
 68         /**
 69          * 年月日实现
 70          * @param callBackId    
 71          * @param callbackContext
 72          */
 73         public synchronized void showDatePicker(final String callBackId,final CallbackContext callbackContext) {  
 74       
 75             final Calendar c = Calendar.getInstance();  
 76             final int mYear = c.get(Calendar.YEAR);  
 77             final int mMonth = c.get(Calendar.MONTH);  
 78             final int mDay = c.get(Calendar.DAY_OF_MONTH);  
 79       
 80             final Runnable runnable = new Runnable() {  
 81       
 82                 public void run() {  
 83                     final DatePickerDialog dpd = new DatePickerDialog(cordova.getActivity(),  
 84                             new OnDateSetListener() {  
 85       
 86                                 public void onDateSet(final DatePicker view,  
 87                                         final int year, final int monthOfYear,  
 88                                         final int dayOfMonth) {  
 89       
 90                                     final JSONObject userChoice = new JSONObject();  
 91       
 92                                     try {  
 93                                         userChoice.put("year", year);  
 94                                         userChoice.put("month", monthOfYear);  
 95                                         userChoice.put("day", dayOfMonth);  
 96                                     } catch (final JSONException jsonEx) {  
 97                                         Log.e("showDatePicker",  
 98                                                 "Got JSON Exception "  
 99                                                         + jsonEx.getMessage());  
100                                         callbackContext.sendPluginResult(new PluginResult(  
101                                                  Status.JSON_EXCEPTION, userChoice));
102                                     }  
103                                     callbackContext.sendPluginResult(new PluginResult(  
104                                             PluginResult.Status.OK, userChoice));
105       
106                                 }  
107                             }, mYear, mMonth, mDay);  
108       
109                     dpd.show();  
110                 }  
111             };  
112             this.cordova.getActivity().runOnUiThread(runnable);
113         }
114     }  

当然的必须将实现类配置在config.xml中

 1 var DatePicker = function() {  
 2 }; 
 3 DatePicker.prototype.showDateOrTime = function(action,successCallback, failureCallback) {
 4     cordova.exec(   
 5         successCallback,
 6         failureCallback,       
 7         'DatePickerPlugin',  //Tell PhoneGap to run "DatePickerPlugin" Plugin  
 8         action,              //Tell plugin, which action we want to perform  
 9         []        //paramter
10     );        //Passing list of args to the plugin  
11 }; 
12 cordova.addConstructor(function(){
13     //如果不支持window.plugins,则创建并设置  
14     if(!window.plugins){  
15         window.plugins={};  
16     } 
17     window.plugins.datePickerPlugin=new DatePicker(); 
18     cordova.addPlugin('datePickerPlugin', new DatePicker());
19     PluginManager.addService("DatePickerPlugin",  
20     "cn.gcsts.plugin.DatePickerPlugin");  
21 });

效果图展示

 

posted @ 2014-07-31 13:04  佰白  Views(432)  Comments(0Edit  收藏  举报