JavascriptProva

sabato 27 febbraio 2016

Compattamento di codice con la creazione della funzione refreshScreen

Ho compattato il codice che rinnova la schermata.
Cancella tutte le immagini dal layout principale e apre quelle indicate dalla categoria voluta.
Adesso vediamo i problemi relativi.

Il cambio di schermata è solo virtuale, vengono scaricate le immagini portatrici di una certa categoria e caricate quelle portatrici di una nuova categoria.
Questo meccanismo scatta:

1) Alla prima apertura.
Inizialmente, la categoria è "iniziale".
Alla prima apertura, che si verifica all'evento onStart, si ha questo codice:
 @Override
 public void onStart(){
  super.onStart();
  if(currentCat==null) currentCat="iniziale";
  mainLayout.removeAllViews();
  try{
   leggiDaDatabase(currentCat);
  } catch(Exception e){} 
  
 }
Se la categoria è indeterminata, come da apertura del programma, viene posta su "iniziale" per aprire la schermata iniziale.
Quindi vengono rimosse tutte le immagini presenti (all'atto della prima apertura non sarebbe necessario in quanto non ve ne sono) e quindi vengono lette dal database tutte quelle con la categoria corrente, che alla prima apertura è stata posta come "iniziale".

2)Al cambio di schermata dopo aver toccato e risollevato il mouse da un'immagine di tipo "categoria":
    case MotionEvent.ACTION_UP:
     if(settingMode){
      TextView et=(TextView)((ViewGroup)v).getChildAt(numEtichetta);
      TextView cat=(TextView)((ViewGroup)v).getChildAt(numCategoria);
      helper.Update(et.getText().toString(), cat.getText().toString(),v.getLeft(), v.getTop());
     }
     else{
      TextView t=(TextView) ((ViewGroup)v).getChildAt(numTipo);
      if(t.getText().equals("categoria")){
       String s=(String) ((TextView)((ViewGroup)v).getChildAt(numEtichetta)).getText();
       mainLayout.removeAllViews();
       try{
        leggiDaDatabase(s);
       }catch(Exception e){}
       currentCat=s;
      }
      else {
       
       TextView e=(TextView) ((ViewGroup)v).getChildAt(numEtichetta);
       tts.speak(e.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
      }
     }
     
    }
Dopo aver selezionato un'immagine, al sollevamento del mouse da essa, se non siamo in modo "setting" e se si tratta di un'immagine di tipo "categoria", cancelliamo tutte le immagini e le riapriamo con la nuova categoria, per poi impostare currentCat con il nuovo valore di categoria.

3)Dopo la cancellazione di un'immagine:
//Codice del pulsante "CANCELLA" per la cancellazione delle immagini
  
  button.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    TextView et=(TextView)ActiveOne.getChildAt(numEtichetta);
    TextView ct=(TextView)ActiveOne.getChildAt(numCategoria);
    TextView tp=(TextView)ActiveOne.getChildAt(numTipo);
    Log.d(et.getText().toString(), ct.getText().toString());
    helper.cancella(et.getText().toString(), ct.getText().toString());
    if(tp.getText().toString().equals("categoria")) helper.cancellaCat(et.getText().toString());
    ActiveOne=null;
    mainLayout.removeAllViews();
    try{
     leggiDaDatabase(currentCat);
    } catch(Exception e){} 
    button.setVisibility(View.INVISIBLE);
    
   }
  });
bisogna eliminare tutte le immagini e quindi riaprire il database sempre con la stessa categoria, senza cambiarla, in modo che non venga più caricata l'immagine eliminata.

Vado a compattare con la nuova routine refreshScreen:
 private void refreshScreen(String cat){
  mainLayout.removeAllViews();
  try{
   leggiDaDatabase(cat);
  } catch(Exception e){} 
 }
...e quindi vado a sostituire nei tre punti di utilizzo il codice con questa routine:

1)Allo Start:
 @Override
 public void onStart(){
  super.onStart();
  if(currentCat==null) currentCat="iniziale";
  refreshScreen(currentCat);
 }


2) Al cambio di schermata (evento onTouch su un'immagine di tipo categoria in modalità non settingMode):
    case MotionEvent.ACTION_UP:
     if(settingMode){
      TextView et=(TextView)((ViewGroup)v).getChildAt(numEtichetta);
      TextView cat=(TextView)((ViewGroup)v).getChildAt(numCategoria);
      helper.Update(et.getText().toString(), cat.getText().toString(),v.getLeft(), v.getTop());
     }
     else{
      TextView t=(TextView) ((ViewGroup)v).getChildAt(numTipo);
      if(t.getText().equals("categoria")){
       String s=(String) ((TextView)((ViewGroup)v).getChildAt(numEtichetta)).getText();
       refreshScreen(s);
       currentCat=s;
      }
      else {
       
       TextView e=(TextView) ((ViewGroup)v).getChildAt(numEtichetta);
       tts.speak(e.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
      }
     }
     
    }
...questa volta però non dando la categoria corrente, ma la nuova categoria ricavata dall'etichetta dell'immagine "categoria";

3) Dopo la cancellazione di un'immagine:
//Codice del pulsante "CANCELLA" per la cancellazione delle immagini
  
  button.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    TextView et=(TextView)ActiveOne.getChildAt(numEtichetta);
    TextView ct=(TextView)ActiveOne.getChildAt(numCategoria);
    TextView tp=(TextView)ActiveOne.getChildAt(numTipo);
    Log.d(et.getText().toString(), ct.getText().toString());
    helper.cancella(et.getText().toString(), ct.getText().toString());
    if(tp.getText().toString().equals("categoria")) helper.cancellaCat(et.getText().toString());
    ActiveOne=null;
    refreshScreen(currentCat);
    button.setVisibility(View.INVISIBLE);
    
   }
  });
sempre con la stessa categoria, stavolta.

Vediamo se funziona...

Testato sia all'avvio sia al cambio categoria sia alla cancellazione di un'immagine: FUNZIONA!

Nessun commento:

Posta un commento