2017-11-29 7 views
0

Ich habe drei Spinner erstellt, die Jahr, Monat, Tag sind. Anscheinend ändert sich mein Tag in meinem Monat.Wie wird ein Standardwert für den dynamischen Spinner festgelegt?

Hier ist meine Funktion:

private void datePick() { 
     Calendar calendar = Calendar.getInstance(); 

     for (int i = 0; i < 100; i++) { 
      dataYear.add("" + (calendar.get(Calendar.YEAR) - i)); 
     } 

     adapterSpYear = new ArrayAdapter<String>(getActivity(), R.layout.spinner, dataYear); 
     adapterSpYear.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); 
     spYear.setAdapter(adapterSpYear); 

     for (int i = 1; i <= 12; i++) { 
      dataMonth.add("" + (i < 10 ? "0" + i : i)); 
     } 

     adapterSpMonth = new ArrayAdapter<String>(getActivity(), R.layout.spinner, dataMonth); 
     adapterSpMonth.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); 
     spMonth.setAdapter(adapterSpMonth); 

     spMonth.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int arg2, long arg3) { 
       dataDay.clear(); 
       Calendar calendar1 = Calendar.getInstance(); 
       calendar1.set(Calendar.YEAR, Integer.valueOf(spYear.getSelectedItem().toString())); 
       calendar1.set(Calendar.MONTH, arg2); 
       int dayOfMonth = calendar1.getActualMaximum(Calendar.DAY_OF_MONTH); 
       for (int i = 1; i <= dayOfMonth; i++) { 
        dataDay.add("" + (i < 10 ? "0" + i : i)); 
       } 
       adapterSpDay = new ArrayAdapter<String>(getActivity(), R.layout.spinner, dataDay); 
       adapterSpDay.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       spDay.setAdapter(adapterSpDay); 
       adapterSpDay.notifyDataSetChanged(); 


       String year = spYear.getSelectedItem().toString(); 
       String month = spMonth.getSelectedItem().toString(); 
       String day = spDay.getSelectedItem().toString(); 

       Log.i("test", ".>>>>Year>>>>" + year); 
       Log.i("test", ".>>>>Month>>>>" + month); 
       Log.i("test", ".>>>>Day>>>>" + day); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 

      } 
     }); 
    } 

Jetzt habe ich ein Standard-Daten zum Beispiel ist 1960.11.24.

Ich versuche, die Nummer Position zu finden und setSelection() zu Jahr und Monat verwenden und Spinner wird Änderung sein. Hier

ist das, was ich versuche:

Calendar calendar = Calendar.getInstance(); 
     int thisYear = calendar.get(Calendar.YEAR); 
     int finalResult = thisYear - 1960; 
     spYear.setSelection(finalResult); //year spinner will show 1960 
     spMonth.setSelection(11-1); //month spinner will show 11 
     spDay.setSelection(20); //day spinner will show 1 

Ich finde Tag spinner Arbeits ist, wenn ich setSelection() verwenden, ich denke Tag Spinner ist dynamisch Basis für Monat Spinner.

Aber ich weiß nicht, wie man es repariert?

Jede Hilfe wäre willkommen. Danke im Voraus.

Antwort

1

Sie müssen so etwas tun. rufen Adapter für Position

Calendar calendar = Calendar.getInstance(); 
     int thisYear = calendar.get(Calendar.YEAR); 
     int finalResult = thisYear - 1960; 
     int positionYear = adapterSpYear.getPosition(String.valueOf(finalResult)) 
     spYear.setSelection(positionYear); //year spinner will show 1960 
     //same goes for month and day 

hier vorhandenen answer. hier ist docs

+0

Vielen Dank für Ihre Antwort, aber ich versuche, den Code, wird positionYear print -1 und meine spYear ist 2017 nicht 1960. –

+0

ja Sie entsprechend Ihrer Anforderung ändern kann, aber die Grundidee ist Position von Adapter zu erhalten . –

+0

Danke, ich ändere das wie folgt: int positionYear = adapterSpYear.getPosition (String.valueOf ("1960")); spYear.setSelection (positionYear); ' –

Verwandte Themen