如何根据月份和年份确定 NumberPicker 值
How to determine NumberPicker values based on month and year
在我的应用程序中,我使用 NumberPicker
和希伯来语值,它看起来像这样:
值取自这样的数组:
String times[] = {"ינו'-18", "פבר'-18", "מרץ-18", "אפר'-18", "מאי-18", "יוני-18", "יולי-18"
, "אוג'-18", "ספט'-18", "אוק'-18", "נוב'-18", "דצמ'-18", "ינו'-19", "פבר'-19", "מרץ-19", "אפר'-19", "מאי-19", "יוני-19", "יולי-19"
, "אוג'-19", "ספט'-19", "אוק'-19", "נוב'-19",};
数组中的希伯来语值对应于这样的月份:
əנו'是一年中的第一个月(一月)
פב'是第二个月(二月)
מרץ' 是第 3 个月(三月)
אפ 是第 4 个月(4 月)
מאי 是第 5 个月(5 月)
יוני 是第 6 个月(6 月)
יולי 是第 7 个月(7 月)
אוג 是第 8 个月(8 月)
ספט 是第 9 个月(九月)
אוק 是第 10 个月(十月)
נוב 是第 11 个月(11 月)
דצמ 是第 12 个月(十二月)
我想设置我的数组值,使其从当前月份开始(例如,如果我们在 2021 年 6 月,第一个值将是 יוני-2021),并将包括下一年的所有月份还有。
起初,我想用很多值将数组保存在远程 database/locally 中,但我意识到这只是一个糟糕的解决方案,因为我需要不断更改数组中的值。
我怎么知道我需要根据当前的月份和年份将什么值(结合上面的希伯来语和年份)放入数组中?
这是一些额外的信息 - 这是我用来设置 numberpicker
值的方法:
private void setNumberPicker(NumberPicker nubmerPicker, String[] numbers) {
nubmerPicker.setMaxValue(numbers.length - 1);
nubmerPicker.setMinValue(0);
nubmerPicker.setWrapSelectorWheel(true);
nubmerPicker.setDisplayedValues(numbers);
}
最后,我找到了一个使用自定义 class 的解决方案:
public class YearAndMontsForNumberPicker {
private String[] demoArray = {"ינו'-xx", "פבר'-xx", "מרץ-xx", "אפר'-xx", "מאי-xx", "יוני-xx", "יולי-xx"
, "אוג'-xx", "ספט'-xx", "אוק'-xx", "נוב'-xx", "דצמ'-xx" , "ינו'-xx", "פבר'-xx", "מרץ-xx", "אפר'-xx", "מאי-xx", "יוני-xx", "יולי-xx"
, "אוג'-xx", "ספט'-xx", "אוק'-xx", "נוב'-xx", "דצמ'-xx"};
private Calendar c = Calendar.getInstance(); //get the proper replacements for the demo array
private int currentMonth = c.get(Calendar.MONTH);
private String currentYear = (c.get(Calendar.YEAR) + "").substring(2);
private String[] finalArray;
//sets the array that will be later use with numberPicker
public String[] setArrayForCurrentYear() {
finalArray = Arrays.copyOfRange(demoArray, currentMonth, demoArray.length);
changeArrayxx(finalArray,currentYear,0,12-currentMonth); //replace the first part with current year
changeArrayxx(finalArray, (Integer.valueOf(currentYear)+1)+"",12-currentMonth,finalArray.length); //replace the end of the array with the next year
return finalArray;
}
private void changeArrayxx(String [] array,String currentyear,int iterator,int condition){
for (int i = iterator; i < condition; i++) { // chang the xx in the array with the last 2 digits
array[i] = array[i].replace("xx", currentyear);
}
}
}
现在,如果剩下的就是像这样获取 class 的实例:
new YearAndMontsForNumberPicker().setArrayForCurrentYear()
对于我的情况,我在 setNumberPicker
方法中调用了这个(检查问题):
setNubmerPicker(currentYearNumberPicker, new YearAndMontsForNumberPicker().setArrayForCurrentYear());
在我的应用程序中,我使用 NumberPicker
和希伯来语值,它看起来像这样:
值取自这样的数组:
String times[] = {"ינו'-18", "פבר'-18", "מרץ-18", "אפר'-18", "מאי-18", "יוני-18", "יולי-18"
, "אוג'-18", "ספט'-18", "אוק'-18", "נוב'-18", "דצמ'-18", "ינו'-19", "פבר'-19", "מרץ-19", "אפר'-19", "מאי-19", "יוני-19", "יולי-19"
, "אוג'-19", "ספט'-19", "אוק'-19", "נוב'-19",};
数组中的希伯来语值对应于这样的月份:
əנו'是一年中的第一个月(一月)
פב'是第二个月(二月)
מרץ' 是第 3 个月(三月)
אפ 是第 4 个月(4 月)
מאי 是第 5 个月(5 月)
יוני 是第 6 个月(6 月)
יולי 是第 7 个月(7 月)
אוג 是第 8 个月(8 月)
ספט 是第 9 个月(九月)
אוק 是第 10 个月(十月)
נוב 是第 11 个月(11 月)
דצמ 是第 12 个月(十二月)
我想设置我的数组值,使其从当前月份开始(例如,如果我们在 2021 年 6 月,第一个值将是 יוני-2021),并将包括下一年的所有月份还有。
起初,我想用很多值将数组保存在远程 database/locally 中,但我意识到这只是一个糟糕的解决方案,因为我需要不断更改数组中的值。
我怎么知道我需要根据当前的月份和年份将什么值(结合上面的希伯来语和年份)放入数组中?
这是一些额外的信息 - 这是我用来设置 numberpicker
值的方法:
private void setNumberPicker(NumberPicker nubmerPicker, String[] numbers) {
nubmerPicker.setMaxValue(numbers.length - 1);
nubmerPicker.setMinValue(0);
nubmerPicker.setWrapSelectorWheel(true);
nubmerPicker.setDisplayedValues(numbers);
}
最后,我找到了一个使用自定义 class 的解决方案:
public class YearAndMontsForNumberPicker {
private String[] demoArray = {"ינו'-xx", "פבר'-xx", "מרץ-xx", "אפר'-xx", "מאי-xx", "יוני-xx", "יולי-xx"
, "אוג'-xx", "ספט'-xx", "אוק'-xx", "נוב'-xx", "דצמ'-xx" , "ינו'-xx", "פבר'-xx", "מרץ-xx", "אפר'-xx", "מאי-xx", "יוני-xx", "יולי-xx"
, "אוג'-xx", "ספט'-xx", "אוק'-xx", "נוב'-xx", "דצמ'-xx"};
private Calendar c = Calendar.getInstance(); //get the proper replacements for the demo array
private int currentMonth = c.get(Calendar.MONTH);
private String currentYear = (c.get(Calendar.YEAR) + "").substring(2);
private String[] finalArray;
//sets the array that will be later use with numberPicker
public String[] setArrayForCurrentYear() {
finalArray = Arrays.copyOfRange(demoArray, currentMonth, demoArray.length);
changeArrayxx(finalArray,currentYear,0,12-currentMonth); //replace the first part with current year
changeArrayxx(finalArray, (Integer.valueOf(currentYear)+1)+"",12-currentMonth,finalArray.length); //replace the end of the array with the next year
return finalArray;
}
private void changeArrayxx(String [] array,String currentyear,int iterator,int condition){
for (int i = iterator; i < condition; i++) { // chang the xx in the array with the last 2 digits
array[i] = array[i].replace("xx", currentyear);
}
}
}
现在,如果剩下的就是像这样获取 class 的实例:
new YearAndMontsForNumberPicker().setArrayForCurrentYear()
对于我的情况,我在 setNumberPicker
方法中调用了这个(检查问题):
setNubmerPicker(currentYearNumberPicker, new YearAndMontsForNumberPicker().setArrayForCurrentYear());