JavascriptProva

mercoledì 27 luglio 2016

Aggiustamento iniziale delle TextView che mostrano i valori delle SeekBar, con creazione di una funzione specifica.

Ora devo pensare ai Settings da salvare in memoria.
Trattandosi di memoria accessibile da ogni parte del programma, si può agire in modo indipendente dalle varia activities.

Inizio a definire le SharedPreferences all'activity TimeSettings.
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_time_settings);
  
  SP=getApplicationContext().getSharedPreferences("settings", Context.MODE_PRIVATE);
Ora dovrei incrociare questi dati con le SeekBars.
Il nome generale delle impostazioni è "settings", ma in particolare i dati devono contenere il tempo in minuti dell'intervallo fra gli avvisi e il tempo in minuti della variabilità dell'intervallo.
Quindi li chiamerò "intervallo" e "range".
Detto questo, bisogna innanzitutto settare i valori delle SeekBars a questi valori: la prima va settata a "intervallo", mentre la seconda a "intervallo" + "range".
I valori di default saranno zero e zero.

Inserisco il codice necessario nell'attività TimeSettings...

Ho spostato la riga che regola il valore massimo della SeekBar per ragioni di ordine, e ho aggiunto il codice che legge intervallo e range dai settings, con valore di default zero.
  seekBarMin=(SeekBar)findViewById(R.id.seekBar1);
  seekBarMin.setMax(240);
  
  
  seekBarMax=(SeekBar)findViewById(R.id.seekBar2);
  seekBarMax.setMax(240);
  
  int intervallo=SP.getInt("intervallo", 0);
  int range=SP.getInt("range", 0);
Ecco poi quello che regola la posizione delle SeekBars, tutto insieme, con qualche riga di codice che permette di stabilire dove ci troviamo:
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_time_settings);

                SP=getApplicationContext().getSharedPreferences("settings", Context.MODE_PRIVATE);
  seekBarMin=(SeekBar)findViewById(R.id.seekBar1);
  seekBarMin.setMax(240);
  
  
  seekBarMax=(SeekBar)findViewById(R.id.seekBar2);
  seekBarMax.setMax(240);
  
  int intervallo=SP.getInt("intervallo", 0);
  int range=SP.getInt("range", 0);
  
  seekBarMin.setProgress(intervallo);
  seekBarMax.setProgress(intervallo+range);
Quindi anche il valore iniziale delle TextView va stabilito. Ma vediamo se si stabilisce da solo, ossia se il setProgress delle SeekBars equivale a una modifica dei valori di esse tale da impostare le TextViews secondo il codice scritto in precedenza...

No. Devo provvedere io a impostare le TextViews inizialmente.
Ma ecco che in pochi secondi compatto tutto il codice che compila le TextView alla variazione di SeekBar, in modo da usare la funzione agilmente anche qui, oltre che nel codice delle SeekBar:
 private void setTextViewFromSeekBar(int numero,TextView textView){
  TextView t=textView;
  int intero=10*(numero/10);
  int ore=intero/60;
  int minuti=intero%60;
  
  String stringaDelleOre;
  String stringaDeiMinuti;
  String stringaEt="";
  
  if(ore==0){
   stringaDelleOre="";
  }
  else if(ore==1){
   stringaDelleOre=ore+" ORA "; 
  }
  else{
   stringaDelleOre=ore+" ORE ";     
  }    
  if(minuti==0){
   stringaDeiMinuti="";     
  }
  else if(minuti==1){
   stringaDeiMinuti=minuti+" MINUTO ";          
  }
  else{
   stringaDeiMinuti=minuti+" MINUTI ";
  }    
  if(ore!=0 && minuti!=0) stringaEt=" E ";
  if(ore==0 && minuti==0) {
   stringaDelleOre=ore+" ORE";
   stringaEt= " E ";
   stringaDeiMinuti=minuti+" MINUTI";
  }

  t.setText(stringaDelleOre+stringaEt+stringaDeiMinuti);
 }
e il codice delle SeekBars diventa:
        seekBarMin.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    setTextViewFromSeekBar(progress,textViewMin);
    if(progress>seekBarMax.getProgress())seekBarMax.setProgress(progress);
   }
  });
  
  
  seekBarMax.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    setTextViewFromSeekBar(progress,textViewMax);
    if(progress<seekBarMin.getProgress())seekBarMin.setProgress(progress);
   }
  });
        }
e funziona...

Ecco quindi la modifica iniziale delle TextView:
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_time_settings);
  
  SP=getApplicationContext().getSharedPreferences("settings", Context.MODE_PRIVATE);
  seekBarMin=(SeekBar)findViewById(R.id.seekBar1);
  seekBarMin.setMax(240);
  
  
  seekBarMax=(SeekBar)findViewById(R.id.seekBar2);
  seekBarMax.setMax(240);
  
  int intervallo=SP.getInt("intervallo", 0);
  int range=SP.getInt("range", 0);
  
  seekBarMin.setProgress(intervallo);
  seekBarMax.setProgress(intervallo+range);
  
  textViewMin=(TextView)findViewById(R.id.textView1);
  setTextViewFromSeekBar(intervallo,textViewMin);
  textViewMax=(TextView)findViewById(R.id.textView2);
  setTextViewFromSeekBar(intervallo+range,textViewMax);
che funziona egregiamente anch'essa!

Nessun commento:

Posta un commento