diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 64aa36b595255d5b0ff118c286b043e928f8826c..eabd322f1453c3b19539f14d7d79744d1e150562 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -95,7 +95,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule { Activity activity = getCurrentActivity(); if (activity != null && options.hasKey(PICKER_DATA)) { view = activity.getLayoutInflater().inflate(R.layout.popup_picker_view, null); - pickerParent = (RelativeLayout) view.findViewById(R.id.pickerParent); barLayout = (RelativeLayout) view.findViewById(R.id.barLayout); cancelTV = (TextView) view.findViewById(R.id.cancel); @@ -218,26 +217,27 @@ public class PickerViewModule extends ReactContextBaseJavaModule { } } - switch (options.getType(PICKER_DATA).name()) { + if (options.hasKey(PICKER_BG_COLOR)) { + ReadableArray array = options.getArray(PICKER_BG_COLOR); + for (int i = 0; i < array.size(); i++) { + if (i == 3) { + pickerColor[i] = (int) (array.getDouble(i) * 255); + } else { + pickerColor[i] = array.getInt(i); + } + } + } + + ReadableArray pickerData = options.getArray(PICKER_DATA); + + String name = pickerData.getType(0).name(); + switch (name) { case "Map": pickerViewLinkage.setVisibility(View.VISIBLE); pickerViewAlone.setVisibility(View.GONE); - ReadableMap linkageData = options.getMap(PICKER_DATA); - if (linkageData != null) { - pickerViewLinkage.setLinkageData(linkageData, curSelectedList); - } + pickerViewLinkage.setPickerData(pickerData, curSelectedList); pickerViewLinkage.setIsLoop(isLoop); - if (options.hasKey(PICKER_BG_COLOR)) { - ReadableArray array = options.getArray(PICKER_BG_COLOR); - for (int i = 0; i < array.size(); i++) { - if (i == 3) { - pickerColor[i] = (int) (array.getDouble(i) * 255); - } else { - pickerColor[i] = array.getInt(i); - } - } - pickerViewLinkage.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2])); - } + pickerViewLinkage.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2])); pickerViewLinkage.setOnSelectListener(new OnSelectedListener() { @Override public void onSelected(ArrayList selectedList) { @@ -247,33 +247,13 @@ public class PickerViewModule extends ReactContextBaseJavaModule { }); pickerViewLinkage.setSelectValue(selectValue, curSelectedList); break; - case "Array": + default: pickerViewAlone.setVisibility(View.VISIBLE); pickerViewLinkage.setVisibility(View.GONE); - ReadableArray aloneData = options.getArray(PICKER_DATA); - - if (aloneData != null) { - switch (aloneData.getType(0).name()) { - case "Array": - pickerViewAlone.setPickerViewDta(aloneData, curSelectedList); - break; - default: - pickerViewAlone.setAloneData(aloneData, curSelectedList); - break; - } - } + + pickerViewAlone.setPickerData(pickerData, curSelectedList); pickerViewAlone.setIsLoop(isLoop); - if (options.hasKey(PICKER_BG_COLOR)) { - ReadableArray array = options.getArray(PICKER_BG_COLOR); - for (int i = 0; i < array.size(); i++) { - if (i == 3) { - pickerColor[i] = (int) (array.getDouble(i) * 255); - } else { - pickerColor[i] = array.getInt(i); - } - } - pickerViewAlone.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2])); - } + pickerViewAlone.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2])); pickerViewAlone.setOnSelectedListener(new OnSelectedListener() { @Override @@ -284,10 +264,10 @@ public class PickerViewModule extends ReactContextBaseJavaModule { }); pickerViewAlone.setSelectValue(selectValue, curSelectedList); - break; } + if (popupWindow == null) { popupWindow = new PopupWindow(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); popupWindow.setBackgroundDrawable(new ColorDrawable()); diff --git a/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java b/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java index ef31445438aaf2d0247934f9daad927dc561d497..194c9438e0cade483ca6e5cb38a0649af088c5eb 100644 --- a/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java +++ b/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java @@ -43,7 +43,18 @@ public class PickerViewAlone extends LinearLayout { this.onSelectedListener = listener; } - public void setAloneData(ReadableArray array, final ArrayList curSelectedList) { + public void setPickerData(ReadableArray array, final ArrayList curSelectedList){ + switch (array.getType(0).name()){ + case "Array": + setMultipleData(array,curSelectedList); + break; + default: + setAloneData(array,curSelectedList); + break; + } + } + + private void setAloneData(ReadableArray array, final ArrayList curSelectedList) { ArrayList values = arrayToList(array); final LoopView loopView = new LoopView(getContext()); LayoutParams params = new LayoutParams( @@ -69,8 +80,7 @@ public class PickerViewAlone extends LinearLayout { pickerViewAloneLayout.addView(loopView); } - - public void setPickerViewDta(ReadableArray array, final ArrayList curSelectedList) { + private void setMultipleData(ReadableArray array, final ArrayList curSelectedList) { final String[] selectedItems = new String[array.size()]; for (int i = 0; i < array.size(); i++) { switch (array.getType(i).name()) { diff --git a/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java b/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java index 02f8ce3c393c94b1e295348342ccc4b125bb0a1d..0005876d414324fa77ba04f676d5f499de3407ab 100644 --- a/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java +++ b/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java @@ -73,10 +73,7 @@ public class PickerViewLinkage extends LinearLayout { private ArrayList twoList = new ArrayList<>(); private ArrayList threeList = new ArrayList<>(); - private ReadableArray array; - private ReadableMap map; - private ReadableMap childMap; - + private ArrayList data = new ArrayList<>(); private int selectOneIndex; private int selectTwoIndex; @@ -87,12 +84,20 @@ public class PickerViewLinkage extends LinearLayout { } } - public void setLinkageData(final ReadableMap map, final ArrayList curSelectedList) { - this.map = map; - ReadableMapKeySetIterator iterator = map.keySetIterator(); - while (iterator.hasNextKey()) { - String key = iterator.nextKey(); - oneList.add(key); + /** + * ReadableArray getMap will remove the item. + * + * */ + public void setPickerData(ReadableArray array, final ArrayList curSelectedList) { + oneList.clear(); + for (int i = 0; i < array.size(); i++) { + ReadableMap map = array.getMap(i); + data.add(map); + ReadableMapKeySetIterator iterator = map.keySetIterator(); + if (iterator.hasNextKey()) { + String oneValue = iterator.nextKey(); + oneList.add(oneValue); + } } checkItems(loopViewOne, oneList); if (curSelectedList.size() > 0) { @@ -100,126 +105,135 @@ public class PickerViewLinkage extends LinearLayout { } else { curSelectedList.add(0, oneList.get(0)); } - String name = map.getType(oneList.get(0)).name(); - switch (name) { - case "Map": - setRow(3); - childMap = map.getMap(oneList.get(0)); - ReadableMapKeySetIterator childIterator = childMap.keySetIterator(); - twoList.clear(); - while (childIterator.hasNextKey()) { - String key = childIterator.nextKey(); - twoList.add(key); - } - checkItems(loopViewTwo, twoList); - if (curSelectedList.size() > 1) { - curSelectedList.set(1, twoList.get(0)); - } else { - curSelectedList.add(1, twoList.get(0)); - } - array = childMap.getArray(twoList.get(0)); - threeList.clear(); - threeList = arrayToList(array); - checkItems(loopViewThree, threeList); - if (curSelectedList.size() > 2) { - curSelectedList.set(2, threeList.get(0)); - } else { - curSelectedList.add(2, threeList.get(0)); - } + ReadableArray childArray = data.get(0).getArray(oneList.get(0)); + String name = childArray.getType(0).name(); + if (name.equals("Map")) { + setRow(3); + + twoList.clear(); + getTwoListData(); + checkItems(loopViewTwo, twoList); + if (curSelectedList.size() > 1) { + curSelectedList.set(1, twoList.get(0)); + } else { + curSelectedList.add(1, twoList.get(0)); + } + + ReadableMap childMap = data.get(0).getArray(oneList.get(0)).getMap(0); + String key = childMap.keySetIterator().nextKey(); + ReadableArray sunArray = childMap.getArray(key); + threeList.clear(); + threeList = arrayToList(sunArray); + checkItems(loopViewThree, threeList); + if (curSelectedList.size() > 2) { + curSelectedList.set(2, threeList.get(0)); + } else { + curSelectedList.add(2, threeList.get(0)); + } - loopViewOne.setListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(String item, int index) { - selectOneIndex = index; - curSelectedList.set(0, item); - - childMap = map.getMap(item); - ReadableMapKeySetIterator childIterator = childMap.keySetIterator(); - twoList.clear(); - while (childIterator.hasNextKey()) { - String key = childIterator.nextKey(); - twoList.add(key); + loopViewOne.setListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(String item, int index) { + selectOneIndex = index; + curSelectedList.set(0, item); + twoList.clear(); + ReadableArray arr = data.get(index).getArray(item); + for (int i = 0; i < arr.size(); i++) { + ReadableMap map = arr.getMap(i); + ReadableMapKeySetIterator ite = map.keySetIterator(); + if (ite.hasNextKey()) { + twoList.add(ite.nextKey()); } - checkItems(loopViewTwo, twoList); - curSelectedList.set(1, twoList.get(0)); + } + checkItems(loopViewTwo, twoList); + curSelectedList.set(1, twoList.get(0)); - array = childMap.getArray(twoList.get(0)); - threeList.clear(); - threeList = arrayToList(array); - checkItems(loopViewThree, threeList); - curSelectedList.set(2, threeList.get(0)); - if (onSelectedListener != null) { - onSelectedListener.onSelected(curSelectedList); - } + ReadableArray ar = data.get(index).getArray(item); + ReadableMap childMap = ar.getMap(0); + String key = childMap.keySetIterator().nextKey(); + ReadableArray sunArray = childMap.getArray(key); + threeList.clear(); + threeList = arrayToList(sunArray); + checkItems(loopViewThree, threeList); + curSelectedList.set(2, threeList.get(0)); + + if (onSelectedListener != null) { + onSelectedListener.onSelected(curSelectedList); } - }); - - loopViewTwo.setListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(String item, int index) { - selectTwoIndex = index; - array = childMap.getArray(item); - threeList.clear(); - threeList = arrayToList(array); - checkItems(loopViewThree, threeList); - - curSelectedList.set(0, oneList.get(selectOneIndex)); - curSelectedList.set(1, item); - curSelectedList.set(2, threeList.get(0)); - if (onSelectedListener != null) { - onSelectedListener.onSelected(curSelectedList); - } + } + }); + + loopViewTwo.setListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(String item, int index) { + selectTwoIndex = index; + + ReadableArray arr = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex)); + ReadableMap childMap = arr.getMap(index); + String key = childMap.keySetIterator().nextKey(); + ReadableArray sunArray = childMap.getArray(key); + threeList.clear(); + threeList = arrayToList(sunArray); + checkItems(loopViewThree, threeList); + + curSelectedList.set(0, oneList.get(selectOneIndex)); + curSelectedList.set(1, item); + curSelectedList.set(2, threeList.get(0)); + if (onSelectedListener != null) { + onSelectedListener.onSelected(curSelectedList); } - }); - - loopViewThree.setListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(String item, int index) { - curSelectedList.set(0, oneList.get(selectOneIndex)); - curSelectedList.set(1, twoList.get(selectTwoIndex)); - curSelectedList.set(2, item); - if (onSelectedListener != null) { - onSelectedListener.onSelected(curSelectedList); - } + } + }); + + loopViewThree.setListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(String item, int index) { + curSelectedList.set(0, oneList.get(selectOneIndex)); + curSelectedList.set(1, twoList.get(selectTwoIndex)); + curSelectedList.set(2, item); + if (onSelectedListener != null) { + onSelectedListener.onSelected(curSelectedList); } - }); - break; - case "Array": - setRow(2); - loopViewOne.setListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(String item, int index) { - selectOneIndex = index; - array = map.getArray(item); - twoList = arrayToList(array); - checkItems(loopViewTwo, twoList); - curSelectedList.set(0, item); - curSelectedList.set(1, twoList.get(0)); - if (onSelectedListener != null) { - onSelectedListener.onSelected(curSelectedList); - } + } + }); + } else { + setRow(2); + loopViewOne.setListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(String item, int index) { + selectOneIndex = index; + ReadableArray arr = data.get(index).getArray(item); + twoList.clear(); + twoList = arrayToList(arr); + checkItems(loopViewTwo, twoList); + curSelectedList.set(0, item); + curSelectedList.set(1, twoList.get(0)); + if (onSelectedListener != null) { + onSelectedListener.onSelected(curSelectedList); } - }); - - array = map.getArray(oneList.get(0)); - twoList = arrayToList(array); - checkItems(loopViewTwo, twoList); + } + }); + + twoList.clear(); + twoList = arrayToList(childArray); + checkItems(loopViewTwo, twoList); + if (curSelectedList.size() > 1) { + curSelectedList.set(1, twoList.get(0)); + } else { curSelectedList.add(1, twoList.get(0)); - loopViewTwo.setListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(String item, int index) { - curSelectedList.set(0, oneList.get(selectOneIndex)); - curSelectedList.set(1, item); - if (onSelectedListener != null) { - onSelectedListener.onSelected(curSelectedList); - } + } + loopViewTwo.setListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(String item, int index) { + curSelectedList.set(0, oneList.get(selectOneIndex)); + curSelectedList.set(1, item); + if (onSelectedListener != null) { + onSelectedListener.onSelected(curSelectedList); } - }); - break; - default: - break; + } + }); } } @@ -258,39 +272,26 @@ public class PickerViewLinkage extends LinearLayout { } else { switch (selectValue.length) { case 1: - if (loopViewOne.hasItem(selectValue[0])) { - selectOneIndex = loopViewOne.getItemPosition(selectValue[0]); - loopViewOne.setSelectedPosition(selectOneIndex); - curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex)); - } else { - loopViewOne.setSelectedPosition(0); - curSelectedList.set(0, loopViewOne.getIndexItem(0)); - } + selectOneLoop(selectValue, curSelectedList); switch (curRow) { case 3: - childMap = map.getMap(oneList.get(selectOneIndex)); - ReadableMapKeySetIterator childIterator = childMap.keySetIterator(); - twoList.clear(); - while (childIterator.hasNextKey()) { - String key = childIterator.nextKey(); - twoList.add(key); - } + twoList.clear(); + getTwoListData(); loopViewTwo.setItems(twoList); loopViewTwo.setSelectedPosition(0); curSelectedList.set(1, loopViewTwo.getIndexItem(0)); - array = childMap.getArray(twoList.get(0)); threeList.clear(); - threeList = arrayToList(array); + getThreeListData(); loopViewThree.setItems(threeList); loopViewThree.setSelectedPosition(0); curSelectedList.set(2, loopViewThree.getIndexItem(0)); break; case 2: - array = map.getArray(oneList.get(selectOneIndex)); - twoList = arrayToList(array); + twoList.clear(); + getAllTwoListData(); loopViewTwo.setItems(twoList); loopViewTwo.setSelectedPosition(0); curSelectedList.set(1, loopViewTwo.getIndexItem(0)); @@ -300,35 +301,15 @@ public class PickerViewLinkage extends LinearLayout { case 2: switch (curRow) { case 3: - if (loopViewOne.hasItem(selectValue[0])) { - selectOneIndex = loopViewOne.getItemPosition(selectValue[0]); - loopViewOne.setSelectedPosition(selectOneIndex); - curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex)); - } else { - loopViewOne.setSelectedPosition(0); - curSelectedList.set(0, loopViewOne.getIndexItem(0)); - } - - childMap = map.getMap(oneList.get(selectOneIndex)); - ReadableMapKeySetIterator childIterator = childMap.keySetIterator(); + selectOneLoop(selectValue, curSelectedList); + twoList.clear(); - while (childIterator.hasNextKey()) { - String key = childIterator.nextKey(); - twoList.add(key); - } - loopViewTwo.setItems(twoList); - if (loopViewTwo.hasItem(selectValue[1])) { - selectTwoIndex = loopViewTwo.getItemPosition(selectValue[1]); - loopViewTwo.setSelectedPosition(selectTwoIndex); - curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex)); - } else { - loopViewTwo.setSelectedPosition(0); - curSelectedList.set(1, loopViewTwo.getIndexItem(0)); - } - - array = childMap.getArray(twoList.get(selectTwoIndex)); + getTwoListData(); + selectTwoLoop(selectValue,curSelectedList); + + threeList.clear(); - threeList = arrayToList(array); + getThreeListData(); loopViewThree.setItems(threeList); loopViewThree.setSelectedPosition(0); curSelectedList.set(2, loopViewThree.getIndexItem(0)); @@ -344,78 +325,124 @@ public class PickerViewLinkage extends LinearLayout { private void selectValues(String[] values, final ArrayList curSelectedList) { switch (values.length) { case 3: - if (loopViewOne.hasItem(values[0])) { - selectOneIndex = loopViewOne.getItemPosition(values[0]); - loopViewOne.setSelectedPosition(selectOneIndex); - curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex)); - } else { - loopViewOne.setSelectedPosition(0); - curSelectedList.set(0, loopViewOne.getIndexItem(0)); - } + selectOneLoop(values, curSelectedList); - childMap = map.getMap(oneList.get(selectOneIndex)); - ReadableMapKeySetIterator childIterator = childMap.keySetIterator(); twoList.clear(); - while (childIterator.hasNextKey()) { - String key = childIterator.nextKey(); - twoList.add(key); - } - loopViewTwo.setItems(twoList); - if (loopViewTwo.hasItem(values[1])) { - selectTwoIndex = loopViewTwo.getItemPosition(values[1]); - loopViewTwo.setSelectedPosition(selectTwoIndex); - curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex)); - } else { - loopViewTwo.setSelectedPosition(0); - curSelectedList.set(1, loopViewTwo.getIndexItem(0)); - } + getTwoListData(); + selectTwoLoop(values, curSelectedList); - array = childMap.getArray(twoList.get(selectTwoIndex)); threeList.clear(); - threeList = arrayToList(array); - loopViewThree.setItems(threeList); - if (loopViewThree.hasItem(values[2])) { - int selectThreeIndex = loopViewThree.getItemPosition(values[2]); - loopViewThree.setSelectedPosition(selectThreeIndex); - curSelectedList.set(2, loopViewThree.getIndexItem(selectThreeIndex)); - } else { - loopViewThree.setSelectedPosition(0); - curSelectedList.set(2, loopViewThree.getIndexItem(0)); - } + getThreeListData(); + selectThreeLoop(values, curSelectedList); break; case 2: - if (loopViewOne.hasItem(values[0])) { - selectOneIndex = loopViewOne.getItemPosition(values[0]); - loopViewOne.setSelectedPosition(selectOneIndex); - curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex)); - } else { - loopViewOne.setSelectedPosition(0); - curSelectedList.set(0, loopViewOne.getIndexItem(0)); - } + selectOneLoop(values, curSelectedList); - array = map.getArray(oneList.get(selectOneIndex)); - twoList = arrayToList(array); - loopViewTwo.setItems(twoList); - if (loopViewTwo.hasItem(values[1])) { - selectTwoIndex = loopViewTwo.getItemPosition(values[1]); - loopViewTwo.setSelectedPosition(selectTwoIndex); - curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex)); - } else { - loopViewTwo.setSelectedPosition(0); - curSelectedList.set(1, loopViewTwo.getIndexItem(0)); - } + twoList.clear(); + getAllTwoListData(); + selectTwoLoop(values, curSelectedList); break; default: break; } } + /** + * 设置第一个滚轮选中的值 + */ + private void selectOneLoop(String[] values, final ArrayList curSelectedList) { + if (loopViewOne.hasItem(values[0])) { + selectOneIndex = loopViewOne.getItemPosition(values[0]); + loopViewOne.setSelectedPosition(selectOneIndex); + curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex)); + } else { + selectOneIndex = 0; + loopViewOne.setSelectedPosition(0); + curSelectedList.set(0, loopViewOne.getIndexItem(0)); + } + } + + /** + * 设置第二个滚轮选中的值 + */ + private void selectTwoLoop(String[] values, final ArrayList curSelectedList) { + loopViewTwo.setItems(twoList); + if (loopViewTwo.hasItem(values[1])) { + selectTwoIndex = loopViewTwo.getItemPosition(values[1]); + loopViewTwo.setSelectedPosition(selectTwoIndex); + curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex)); + } else { + selectTwoIndex = 0; + loopViewTwo.setSelectedPosition(0); + curSelectedList.set(1, loopViewTwo.getIndexItem(0)); + } + } + + /** + * 设置第三个滚轮选中的值 + */ + private void selectThreeLoop(String[] values, final ArrayList curSelectedList) { + loopViewThree.setItems(threeList); + if (loopViewThree.hasItem(values[2])) { + int selectThreeIndex = loopViewThree.getItemPosition(values[2]); + loopViewThree.setSelectedPosition(selectThreeIndex); + curSelectedList.set(2, loopViewThree.getIndexItem(selectThreeIndex)); + } else { + loopViewThree.setSelectedPosition(0); + curSelectedList.set(2, loopViewThree.getIndexItem(0)); + } + } + + /** + * 只有两个滚轮 + * 获取第二个滚轮的值 + */ + private void getAllTwoListData() { + ReadableArray arr = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex)); + twoList = arrayToList(arr); + } + + /** + * 有三个滚轮 + * 获取第二个滚轮的值 + */ + private void getTwoListData() { + ReadableArray childArray = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex)); + for (int i = 0; i < childArray.size(); i++) { + ReadableMap map = childArray.getMap(i); + ReadableMapKeySetIterator iterator = map.keySetIterator(); + if (iterator.hasNextKey()) { + twoList.add(iterator.nextKey()); + } + } + } + + /** + * 获取第三个滚轮的值 + * */ + private void getThreeListData(){ + //{ NativeMap: {"b":[{"b1":[11,22,33,44]},{"b2":[55,66,77,88]},{"b3":[99,1010,1111,1212]}]} } + ReadableMap childMap = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex)).getMap(selectTwoIndex); + String key = childMap.keySetIterator().nextKey(); + ReadableArray sunArray = childMap.getArray(key); + threeList = arrayToList(sunArray); + } + public void setIsLoop(boolean isLoop) { if (!isLoop) { - loopViewOne.setNotLoop(); - loopViewTwo.setNotLoop(); - loopViewThree.setNotLoop(); + switch (curRow) { + case 2: + loopViewOne.setNotLoop(); + loopViewTwo.setNotLoop(); + break; + case 3: + loopViewOne.setNotLoop(); + loopViewTwo.setNotLoop(); + loopViewThree.setNotLoop(); + break; + } + } } diff --git a/ios/RCTBEEPickerManager.xcodeproj/project.xcworkspace/xcuserdata/mfhj-dz-001-417.xcuserdatad/UserInterfaceState.xcuserstate b/ios/RCTBEEPickerManager.xcodeproj/project.xcworkspace/xcuserdata/mfhj-dz-001-417.xcuserdatad/UserInterfaceState.xcuserstate index e9a5be8a5a67f859432f89711b973c07bdb729a8..efef571256200e7f3009442094140cac7e95d8bc 100644 Binary files a/ios/RCTBEEPickerManager.xcodeproj/project.xcworkspace/xcuserdata/mfhj-dz-001-417.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/RCTBEEPickerManager.xcodeproj/project.xcworkspace/xcuserdata/mfhj-dz-001-417.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ios/RCTBEEPickerManager/BzwPicker.h b/ios/RCTBEEPickerManager/BzwPicker.h index 371165b4533c09747397eb1c754859bd5644af2c..ecc4baa51a1e7c2083bde6d87f3d9ac229bcd31e 100755 --- a/ios/RCTBEEPickerManager/BzwPicker.h +++ b/ios/RCTBEEPickerManager/BzwPicker.h @@ -22,12 +22,15 @@ typedef void(^backBolock)(NSDictionary * ); @property (strong, nonatomic) NSDictionary *pickerDic;//一开始进来的字典 -@property (strong, nonatomic) NSArray *provinceArray;//省、市 -@property (strong, nonatomic) NSArray *cityArray;//市,县 +@property(strong,nonatomic)NSArray *dataDry;//一进来的就没有数组和字典的区别肯定是一个字典 + +@property (strong, nonatomic) NSMutableArray *provinceArray;//省、市 +@property (strong, nonatomic) NSMutableArray *cityArray;//市,县 @property (strong, nonatomic) NSArray *townArray;//县,区 -@property (strong, nonatomic) NSDictionary *selectedDic;//3级联动时候用到的 +@property(strong,nonatomic)NSArray *selectthreeAry; + @property (strong,nonatomic)NSArray *selectArry;//2级联动时候用的 @property (strong,nonatomic)UIButton *leftBtn;//取消 @@ -38,8 +41,6 @@ typedef void(^backBolock)(NSDictionary * ); @property(strong,nonatomic)NSString *rightStr; -//用来判断进来的类型 -@property(strong,nonatomic)id value; @property(assign,nonatomic)BOOL Correlation;//判断有没有没有关联 @@ -52,10 +53,20 @@ typedef void(^backBolock)(NSDictionary * ); @property(assign,nonatomic)BOOL noArryElementBool; +@property(strong,nonatomic)NSMutableArray *infoArry; + //创建一个数组 接收进来的选择Value @property(strong,nonatomic)NSArray *selectValueArry; +//创建一个下角标记录是第几行 来一进来判断第一行被选中 当进来的是关联两行的逻辑的时候 或者三行关联的时候取第二行做记录 + +@property(assign,nonatomic)NSInteger num; + +//创建一个下角标 第三行做记录 + +@property(assign,nonatomic)NSInteger threenum; + -(instancetype)initWithFrame:(CGRect)frame dic:(NSDictionary *)dic leftStr:(NSString *)leftStr centerStr:(NSString *)centerStr rightStr:(NSString *)rightStr topbgColor:(NSArray *)topbgColor bottombgColor:(NSArray *)bottombgColor leftbtnbgColor:(NSArray *)leftbtnbgColor rightbtnbgColor:(NSArray *)rightbtnbgColor centerbtnColor:(NSArray *)centerbtnColor selectValueArry:(NSArray *)selectValueArry; diff --git a/ios/RCTBEEPickerManager/BzwPicker.m b/ios/RCTBEEPickerManager/BzwPicker.m index 34ac20e9f7e9afed7a84bee32699157ace219307..7b24c3a50bfd292f3428cca64676f362fd8c6392 100755 --- a/ios/RCTBEEPickerManager/BzwPicker.m +++ b/ios/RCTBEEPickerManager/BzwPicker.m @@ -16,6 +16,8 @@ if (self) { self.backArry=[[NSMutableArray alloc]init]; + self.provinceArray=[[NSMutableArray alloc]init]; + self.cityArray=[[NSMutableArray alloc]init]; self.selectValueArry=selectValueArry; self.pickerDic=dic; self.leftStr=leftStr; @@ -83,13 +85,6 @@ [self addSubview:self.pick]; self.pick.backgroundColor=[self colorWith:bottombgColor]; - - if (_Correlation) { - - NSDictionary *dic=(NSDictionary *)self.value; - - self.selectedDic =[dic objectForKey:[self.provinceArray objectAtIndex:0]]; - } } //返回显示的列数 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView @@ -194,106 +189,116 @@ //表示一个数组 特殊情况 return 110; }else{ - NSArray *arry=(NSArray *)self.value; - return SCREEN_WIDTH/arry.count; + return SCREEN_WIDTH/self.dataDry.count; } } } - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { + if (!row) { + row=0; + } [self.backArry removeAllObjects]; - + [self.infoArry removeAllObjects]; + if (_Correlation) { //这里是关联的 - if ([_numberCorrela isEqualToString:@"three"]) { - - if (component == 0) - { - NSDictionary *dic=(NSDictionary *)self.value; - - NSInteger setline=[_pick selectedRowInComponent:0]; - - if (setline) { - self.selectedDic =[dic objectForKey:[self.provinceArray objectAtIndex:setline]]; - }else{ - self.selectedDic =[dic objectForKey:[self.provinceArray objectAtIndex:row]]; - } + if ([_numberCorrela isEqualToString:@"three"]) { - if (self.selectedDic) { - - self.cityArray = [self.selectedDic allKeys]; - } - else - { - self.cityArray = nil; - } - if (self.cityArray.count > 0) + if (component == 0) { + [self.cityArray removeAllObjects]; - NSInteger oldrow=[self.pick selectedRowInComponent:1]; - - if (oldrow) { + NSInteger setline=[_pick selectedRowInComponent:0]; + + if (setline) { - self.townArray=[self.selectedDic objectForKey:[self.cityArray objectAtIndex:oldrow]]; + self.selectthreeAry =[[self.dataDry objectAtIndex:setline]objectForKey:[self.provinceArray objectAtIndex:setline]]; }else{ - row=0; + setline=0; - self.townArray=[self.selectedDic objectForKey:[self.cityArray objectAtIndex:row]]; + self.selectthreeAry =[[self.dataDry objectAtIndex:0] objectForKey:[self.provinceArray objectAtIndex:0]]; } + + if (self.selectthreeAry) { + //遍历数组 + for (NSInteger i=0; i 0) + { + + self.townArray=[[self.selectthreeAry objectAtIndex:0]objectForKey:[self.cityArray objectAtIndex:0]]; + + } + else + { + self.townArray = nil; + } + [pickerView reloadAllComponents]; + [pickerView selectRow:0 inComponent:1 animated:YES]; + [pickerView selectRow:0 inComponent:2 animated:YES]; + } - else - { - self.townArray = nil; - } - } - - [pickerView selectedRowInComponent:1]; - [pickerView reloadAllComponents]; - [pickerView selectedRowInComponent:2]; - - if (component == 1) - { - if (self.selectedDic && self.cityArray.count > 0) + if (component == 1) { - self.townArray=[self.selectedDic objectForKey:[self.cityArray objectAtIndex:row]]; - } - else - { - self.townArray = nil; + NSInteger setline=[_pick selectedRowInComponent:0]; + + if (setline) { + + self.selectthreeAry =[[self.dataDry objectAtIndex:setline]objectForKey:[self.provinceArray objectAtIndex:setline]]; + + NSLog(@"%@",_selectthreeAry); + self.townArray=[[self.selectthreeAry objectAtIndex:row]objectForKey:[self.cityArray objectAtIndex:row]]; + + }else{ + + setline=0; + + self.selectthreeAry =[[self.dataDry objectAtIndex:0] objectForKey:[self.provinceArray objectAtIndex:0]]; + + //NSLog(@"%ld",(long)row); + self.townArray=[[self.selectthreeAry objectAtIndex:row]objectForKey:[self.cityArray objectAtIndex:row]]; + } + + [pickerView reloadAllComponents]; + [pickerView selectRow:0 inComponent:2 animated:YES]; } - [pickerView selectRow:1 inComponent:2 animated:YES]; - } - - [pickerView reloadComponent:2]; - - }else if ([_numberCorrela isEqualToString:@"two"]){ - - if (component == 0) - { - NSDictionary *dic=(NSDictionary *)self.value; - self.selectArry =[dic objectForKey:[self.provinceArray objectAtIndex:row]]; + }else if ([_numberCorrela isEqualToString:@"two"]){ - if (self.selectArry.count>0) { - - self.cityArray = self.selectArry; - } - else + if (component == 0) { - self.cityArray = nil; + [self.cityArray removeAllObjects]; + + self.selectArry =[[self.dataDry objectAtIndex:row]objectForKey:[self.provinceArray objectAtIndex:row]]; + + if (self.selectArry.count>0) { + + [self.cityArray addObjectsFromArray:self.selectArry]; + } + else + { + self.cityArray = nil; + } } + [pickerView reloadComponent:1]; + [pickerView selectRow:0 inComponent:1 animated:YES]; } - - [pickerView selectedRowInComponent:1]; - [pickerView reloadComponent:1]; - } } //返回选择的值就可以了 @@ -310,30 +315,33 @@ [self.backArry addObject:c]; }else if ([_numberCorrela isEqualToString:@"two"]){ - + NSString *a=[self.provinceArray objectAtIndex:[self.pick selectedRowInComponent:0]]; NSString *b=[self.cityArray objectAtIndex:[self.pick selectedRowInComponent:1]]; - NSLog(@"%@---%@",a,b); + // NSLog(@"%@---%@",a,b); [self.backArry addObject:a]; [self.backArry addObject:b]; } }else { + if (_noArryElementBool) { [self.backArry addObject:[self.noCorreArry objectAtIndex:row]]; - }else{ - //无关联的,直接给三个选项就行 - for (NSInteger i=0; i 0) { + //这里是关联的 + if ([_numberCorrela isEqualToString:@"three"]) { + //省 市 + for (NSInteger i=0; i 0) { + NSDictionary *dic=[self.dataDry firstObject]; + + NSArray *ary=[dic objectForKey:[self.provinceArray objectAtIndex:0]]; + + + if (self.provinceArray.count > 0) { + + for (NSInteger i=0; i 0) { + + NSDictionary *dic=[ary firstObject]; + + self.townArray=[dic objectForKey:[self.cityArray firstObject]]; + + } + }else if ([_numberCorrela isEqualToString:@"two"]){ + for (NSInteger i=0; i0) { - self.cityArray=selecityAry; + [self.cityArray removeAllObjects]; + + for (NSInteger i=0; i0) { if (self.selectValueArry.count>1) { - NSArray *arry =[threeDic objectForKey:[self.selectValueArry objectAtIndex:1]]; + NSArray *arry =[[selecityAry objectAtIndex:_threenum] objectForKey:[self.selectValueArry objectAtIndex:1]]; + if (arry.count>0) { self.townArray=arry; @@ -552,10 +602,9 @@ } } [_pick reloadAllComponents]; - } //两行时候的选择哪个的逻辑 --(void)selectValueTwo:(NSDictionary *)dic +-(void)selectValueTwo { NSString *selectStr=[NSString stringWithFormat:@"%@",self.selectValueArry.firstObject]; @@ -563,21 +612,30 @@ for (NSInteger i=0; i0) { + + [self.cityArray removeAllObjects]; + [self.cityArray addObjectsFromArray:twoArry]; } + NSString *selectTwoStr; if (self.selectValueArry.count>1) { + selectTwoStr =[NSString stringWithFormat:@"%@",[self.selectValueArry objectAtIndex:1]]; } for (NSInteger i=0; i