Speriamo che funzioni.
Ho due spinner, spinnerH e spinnerM, uno per impostare le ore e uno per i minuti di un intervallo di tempo.
Carico ognuno di essi con un arrayList e un arrayAdapter.
final List<Integer> arrListH=new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5)); final ArrayAdapter<Integer> adapterH = new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListH)adapterH.add(i); final List<Integer> arrListM=new ArrayList<Integer>(Arrays.asList(0,5,10,15,20,25,30,35,40,45,50,55)); final ArrayAdapter<Integer> adapterM = new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListM)adapterM.add(i); spinnerH.setAdapter(adapterH); spinnerM.setAdapter(adapterM);(il final è richiesto successivamente quando queste variabili vanno modificate).
All'atto della selezione su ognuno di questi spinner viene definito un Intervallo in minuti, moltiplicando il dato del primo spinner per 60 e sommandolo al dato del secondo spinner.
Ecco la funzione della selezione di ciascuno dei due spinner.
spinnerH.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Object item=parent.getSelectedItem(); Integer selectedItem=(Integer)item; Intervallo=selectedItem*60+(Integer)spinnerM.getSelectedItem(); } @Override public void onNothingSelected(AdapterView parent) { // TODO Auto-generated method stub } }); spinnerM.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Object item=parent.getSelectedItem(); Integer selectedItem=(Integer)item; Intervallo=selectedItem+60*(Integer)spinnerH.getSelectedItem(); } @Override public void onNothingSelected(AdapterView parent) { // TODO Auto-generated method stub } });Dunque, a questo punto, ho definito l'intervallo basandomi sui due spinner. Punto. Per il momento basta così!
Ora devo agire sugli altri due spinner.
Sono gli spinner spinnerHr e spinnerMin.
final List<Integer> arrListHr=new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5)); final ArrayAdapter<Integer> adapterHr = new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListHr)adapterHr.add(i); final List<Integer> arrListMin=new ArrayList<Integer>(Arrays.asList(0,5,10,15,20,25,30,35,40,45,50,55)); final ArrayAdapter<Integer> adapterMin=new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListMin) adapterMin.add(i); spinnerHr.setAdapter(adapterHr); spinnerMin.setAdapter(adapterMin);
Devo contenere questi spinner a definire un intervallo più piccolo di quello specificato dai primi due spinner.
Dunque uso questa formula: per lo spinnerHr, il suo valore moltiplicato per 60 deve essere inferiore all'intervallo.
La tecnica:
scarico l'arrayAdapter relativo.
ricarico l'adapter dietro condizione che i valori siano tali da rispettare la condizione specificata.
adapterHr.clear(); for(Integer i : arrListHr){ if(i*60<Intervallo || i==0)adapterHr.add(i); } spinnerHr.setSelection(0);mettendo il codice sia sotto l'evento onItemSelected dello spinnerH che dello spinnerM.
In questo modo qualunque manipolazione di uno dei due spinner resetta il valore delle ore dello spinnerHr in funzione dell'intervallo definito dai primi due spinner.
Quindi devo manipolare lo spinnerMin, in modo che l'adapterMin sia caricato solo con valori che, sommati a quello di spinnerHr moltiplicato per 60 non diano un valore superiore a quello dell'Intervallo.
Inserisco quindi nel codice di spinnerHr il codice:
adapterMin.clear(); for(Integer i : arrListMin){ if((i+selectedItem*60)<Intervallo) adapterMin.add(i); } spinnerMin.setSelection(0););Ora mi ricopio qui tutto il codice e poi lo rifaccio, a titolo di esercizio (solita tecnica del Mandala)
public class MainActivity extends Activity { Spinner spinnerH; Spinner spinnerM; Spinner spinnerHr; Spinner spinnerMin; int Intervallo=1000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinnerH=(Spinner)findViewById(R.id.spinner3); spinnerM=(Spinner)findViewById(R.id.spinner4); spinnerHr=(Spinner)findViewById(R.id.spinner1); spinnerMin=(Spinner)findViewById(R.id.spinner2); final List<Integer> arrListH=new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5)); final ArrayAdapter<Integer> adapterH = new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListH)adapterH.add(i); final List<Integer> arrListM=new ArrayList<Integer>(Arrays.asList(0,5,10,15,20,25,30,35,40,45,50,55)); final ArrayAdapter<Integer> adapterM = new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListM)adapterM.add(i); final List<Integer> arrListHr=new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5)); final ArrayAdapter<Integer> adapterHr = new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListHr)adapterHr.add(i); final List<Integer> arrListMin=new ArrayList<Integer>(Arrays.asList(0,5,10,15,20,25,30,35,40,45,50,55)); final ArrayAdapter<Integer> adapterMin=new ArrayAdapter<Integer>(this,R.layout.testo); for(Integer i:arrListMin) adapterMin.add(i); spinnerH.setAdapter(adapterH); spinnerM.setAdapter(adapterM); spinnerHr.setAdapter(adapterHr); spinnerMin.setAdapter(adapterMin); //definiamo l'intervallo con i due spinner superiori spinnerH.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Object item=parent.getSelectedItem(); Integer selectedItem=(Integer)item; Intervallo=selectedItem*60+(Integer)spinnerM.getSelectedItem(); adapterHr.clear(); for(Integer i : arrListHr){ if(i*60<Intervallo || i==0)adapterHr.add(i); } spinnerHr.setSelection(0); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); spinnerM.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Object item=parent.getSelectedItem(); Integer selectedItem=(Integer)item; adapterHr.clear(); for(Integer i : arrListHr){ if(i*60<Intervallo || i==0)adapterHr.add(i); } Intervallo=selectedItem+60*(Integer)spinnerH.getSelectedItem(); adapterHr.clear(); for(Integer i : arrListHr){ if(i*60<Intervallo || i==0)adapterHr.add(i); } } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); spinnerHr.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Object item=parent.getSelectedItem(); Integer selectedItem=(Integer)item; adapterMin.clear(); for(Integer i : arrListMin){ if((i+selectedItem*60)<Intervallo) adapterMin.add(i); } spinnerMin.setSelection(0); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); } }
Nessun commento:
Posta un commento