diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index a7ca5847af651a98e64568bfdf8ad041d5f37649..fe792fff3c455ed02674d4f7b0199f7c5a00b98f 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -6,7 +6,6 @@ import android.graphics.Color; import android.graphics.PixelFormat; import android.support.annotation.Nullable; import android.text.TextUtils; -import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.Window; @@ -60,13 +59,17 @@ import static android.graphics.Color.argb; * Edited by heng on 2016/12/23 * 1. Changed returnData type * 2. Added pickerToolBarFontSize - * + *
* Edited by heng on 2016/12/26 * 1. Fixed returnData bug * 2. Added pickerFontColor * 3. Added pickerFontSize * 4. Used LifecycleEventListener replace Application.ActivityLifecycleCallbacks * 5. Fixed other bug + * + * Edited by heng on 2017/01/17 + * 1. Added select(ReadableArray array, Callback callback) + * 2. Optimization code */ public class PickerViewModule extends ReactContextBaseJavaModule implements LifecycleEventListener { @@ -103,14 +106,10 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life private static final String EVENT_KEY_CANCEL = "cancel"; private static final String EVENT_KEY_SELECTED = "select"; - private static final String ERROR_NOT_INIT = "please initialize"; + private static final String ERROR_NOT_INIT = "please initialize the component first"; private Dialog dialog = null; - private PickerViewLinkage pickerViewLinkage; - private PickerViewAlone pickerViewAlone; - private boolean isAlone = true; - private boolean isLoop = true; private String confirmText; @@ -123,6 +122,9 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life private int curStatus; + private PickerViewLinkage pickerViewLinkage; + private PickerViewAlone pickerViewAlone; + public PickerViewModule(ReactApplicationContext reactContext) { super(reactContext); reactContext.addLifecycleEventListener(this); @@ -266,31 +268,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life } } - String[] selectValue = {}; - if (options.hasKey(SELECTED_VALUE)) { - ReadableArray array = options.getArray(SELECTED_VALUE); - selectValue = new String[array.size()]; - String value = ""; - for (int i = 0; i < array.size(); i++) { - switch (array.getType(i).name()) { - case "Boolean": - value = String.valueOf(array.getBoolean(i)); - break; - case "Number": - try { - value = String.valueOf(array.getInt(i)); - } catch (Exception e) { - value = String.valueOf(array.getDouble(i)); - } - break; - case "String": - value = array.getString(i); - break; - } - selectValue[i] = value; - } - } - int pickerTextColor = 0xff000000; if (options.hasKey(PICKER_TEXT_COLOR)) { ReadableArray array = options.getArray(PICKER_TEXT_COLOR); @@ -313,7 +290,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life String name = pickerData.getType(0).name(); switch (name) { case "Map": - isAlone = false; curStatus = 1; pickerViewLinkage.setVisibility(View.VISIBLE); pickerViewAlone.setVisibility(View.GONE); @@ -330,7 +306,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life commonEvent(EVENT_KEY_SELECTED); } }); - pickerViewLinkage.setSelectValue(selectValue); pickerViewHeight = pickerViewLinkage.getViewHeight(); break; default: @@ -351,18 +326,22 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life } }); - pickerViewAlone.setSelectValue(selectValue); pickerViewHeight = pickerViewAlone.getViewHeight(); break; } + if (options.hasKey(SELECTED_VALUE)) { + ReadableArray array = options.getArray(SELECTED_VALUE); + String[] selectedValue = getSelectedValue(array); + select(selectedValue); + } + if (options.hasKey(PICKER_BG_COLOR)) { ReadableArray array = options.getArray(PICKER_BG_COLOR); int[] colors = getColor(array); pickerLayout.setBackgroundColor(argb(colors[3], colors[0], colors[1], colors[2])); } - Log.d("PickerView", "pickerViewHeight = " + pickerViewHeight); int height = barViewHeight + pickerViewHeight; if (dialog == null) { dialog = new Dialog(activity, R.style.Dialog_Full_Screen); @@ -385,6 +364,18 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life } } + @ReactMethod + public void select(ReadableArray array, Callback callback) { + if (dialog == null) { + if (callback != null) { + callback.invoke(ERROR_NOT_INIT); + } + return; + } + String[] selectedValue = getSelectedValue(array); + select(selectedValue); + } + @ReactMethod public void show() { if (dialog == null) { @@ -405,37 +396,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life } } - @ReactMethod - public void select(ReadableArray array) { - if (dialog != null) { - String[] selectValue = new String[array.size()]; - String value = ""; - for (int i = 0; i < array.size(); i++) { - switch (array.getType(i).name()) { - case "Boolean": - value = String.valueOf(array.getBoolean(i)); - break; - case "Number": - try { - value = String.valueOf(array.getInt(i)); - } catch (Exception e) { - value = String.valueOf(array.getDouble(i)); - } - break; - case "String": - value = array.getString(i); - break; - } - selectValue[i] = value; - } - if(isAlone){ - pickerViewAlone.setSelectValue(selectValue); - }else{ - pickerViewLinkage.setSelectValue(selectValue); - } - } - } - @ReactMethod public void isPickerShow(Callback callback) { if (callback == null) @@ -466,6 +426,41 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life return colors; } + private String[] getSelectedValue(ReadableArray array) { + String[] selectValue = new String[array.size()]; + String value = ""; + for (int i = 0; i < array.size(); i++) { + switch (array.getType(i).name()) { + case "Boolean": + value = String.valueOf(array.getBoolean(i)); + break; + case "Number": + try { + value = String.valueOf(array.getInt(i)); + } catch (Exception e) { + value = String.valueOf(array.getDouble(i)); + } + break; + case "String": + value = array.getString(i); + break; + } + selectValue[i] = value; + } + return selectValue; + } + + private void select(String[] selectedValue) { + switch (curStatus) { + case 0: + pickerViewAlone.setSelectValue(selectedValue); + break; + case 1: + pickerViewLinkage.setSelectValue(selectedValue); + break; + } + } + private void commonEvent(String eventKey) { WritableMap map = Arguments.createMap(); map.putString("type", eventKey); @@ -501,7 +496,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life @Override public void onHostDestroy() { - hide(); - dialog = null; + } -} \ No newline at end of file +} diff --git a/example/PickerTest/index.js b/example/PickerTest/index.js index 9764138e96eec6590677815231dc6724c02ef853..dc0210a84f5e6e8ff6b4bb76734a5ecbe4d36c8b 100644 --- a/example/PickerTest/index.js +++ b/example/PickerTest/index.js @@ -106,6 +106,7 @@ class PickerTest extends Component { console.log('area', pickedValue); }, onPickerSelect: pickedValue => { + //Picker.select(['山东', '青岛', '黄岛区']) console.log('area', pickedValue); } }); diff --git a/index.js b/index.js index d199e5b805f576b5118be5c78966e3d3a1e4c0f7..f951ed30e15edb51f0b2dbc065e643111a6695fc 100644 --- a/index.js +++ b/index.js @@ -55,8 +55,10 @@ export default { Picker.hide(); }, - select(data) { - Picker.select(data) + select(arr, fn) { + Picker.select(arr, err => { + typeof fn === 'function' && fn(err); + }); }, toggle(){ diff --git a/package.json b/package.json index 9be7cd3a30cc8418722b57e6518fae0160e826ef..84833801c327f8b8116b163979ae2b530a3526ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-picker", - "version": "4.0.16", + "version": "4.0.17", "description": "", "main": "index.js", "scripts": {