Как определить значения NumberPicker на основе месяца и года - PullRequest
0 голосов
/ 20 марта 2019

В моем приложении я использую NumberPicker со значениями на иврите, и это выглядит так:

enter image description here

Значения взяты из массива следующим образом:

 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-й месяц (апрель)

  • מאי это 5-й месяц (май)

  • יוני это 6-й месяц (июнь)

  • יולי это 7-й месяц (июль)

  • אוג это 8-й месяц (август)

  • ספט - 9-й месяц (сентябрь)

  • אוק - 10-й месяц (октябрь)

  • נוב - 11-й месяц (ноябрь)

  • - 12-й месяц (декабрь)

Я хочу установить значения моего массива так, чтобы он начинался с текущего месяца (например, если мы находимся в июне-2021 году, первое значение будет יוני -2021) и будет также включать все месяцы в следующем году .

Сначала я думал о сохранении массива в удаленной базе данных / локально с большим количеством значений, но я понял, что это просто плохое решение, потому что мне нужно будет постоянно менять значения в массиве.

Как узнать, какие значения (объединяющие иврит и год, как указано выше) мне нужно поместить в массив в соответствии с текущим месяцем и годом?

Вот некоторая дополнительная информация - вот метод, который я использую для установки значений numberpicker:

private void setNumberPicker(NumberPicker nubmerPicker, String[] numbers) {
    nubmerPicker.setMaxValue(numbers.length - 1);
    nubmerPicker.setMinValue(0);
    nubmerPicker.setWrapSelectorWheel(true);
    nubmerPicker.setDisplayedValues(numbers);
}

1 Ответ

0 голосов
/ 06 мая 2019

В конце концов, я нашел решение, используя собственный класс, который я создал:

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);
        }
    }
}

Теперь все, если осталось сделать, получают экземпляр этого класса следующим образом:

new YearAndMontsForNumberPicker().setArrayForCurrentYear()

Для моего случая я вызвал это внутри setNumberPicker метода (проверьте вопрос):

setNubmerPicker(currentYearNumberPicker, new YearAndMontsForNumberPicker().setArrayForCurrentYear());
...