Ecco: ho sistemato i lucchetti che shiftano fra normal mode e setting mode:
public class MainActivity extends AppCompatActivity {
View.OnLongClickListener lucchettoListener;
//le immagini dei lucchetti per lo shiftaggio da e a settingMode
ImageView lucchettoSinistro;
ImageView lucchettoDestro;
//LA VARIABILE PIU' IMPORTANTE, che stabilisce il modo setting o quello normale.
boolean settingMode;
//Variabili relative alle componenti della finestra
RelativeLayout mainLayout;
ScrollView scrollView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//istanziazione delle immagini dei lucchetti
lucchettoSinistro=(ImageView)findViewById(R.id.lucchettoSinistro);
lucchettoDestro=(ImageView)findViewById(R.id.lucchettoDestro);
//EVENT LISTENER DELLE VITI PER PASSARE A SETTINGMODE
lucchettoListener = new View.OnLongClickListener() {
boolean boolLucchettoSinistroAperto,boolLucchettoDestroAperto;
@Override
public boolean onLongClick(View v) {
if(v==lucchettoSinistro){
if(boolLucchettoSinistroAperto==false){
lucchettoSinistro.setImageResource(R.drawable.lucaperto);
boolLucchettoSinistroAperto=true;
}else{
lucchettoSinistro.setImageResource(R.drawable.lucchiuso);
boolLucchettoSinistroAperto=false;
}
}
if(v==lucchettoDestro){
if(boolLucchettoDestroAperto==false){
lucchettoDestro.setImageResource(R.drawable.lucaperto);
boolLucchettoDestroAperto=true;
}else{
lucchettoDestro.setImageResource(R.drawable.lucchiuso);
boolLucchettoDestroAperto=false;
}
}
Vibrator vibrator =(Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(500);
if(boolLucchettoSinistroAperto==true && boolLucchettoDestroAperto==true){
settingMode=true;
}
if(boolLucchettoSinistroAperto==false && boolLucchettoDestroAperto==false){
settingMode=false;
}
System.out.println("SETTING MODE"+settingMode);
return true;
}
};
lucchettoSinistro.setOnLongClickListener(lucchettoListener);
lucchettoDestro.setOnLongClickListener(lucchettoListener);
}
}
(il codice in verde è solo per farmi da segnale, e andrà eliminato).
Okay! Ora devo definire due status, uno per il normal mode e uno per il setting mode.
Opto per non mettere in questi status lo stato di apertura o chiusura dei lucchetti, perché questi semmai si potranno conservare in savedInstanceStatus.
Ma prima creo un listener customizzato per la variabile settingMode.
Ecco creato il tutto. Funziona.
public class MainActivity extends AppCompatActivity { //Dichiarazione del listener per i lucchetti View.OnLongClickListener lucchettoListener; //le immagini dei lucchetti per lo shiftaggio da e a settingMode ImageView lucchettoSinistro; ImageView lucchettoDestro; //LA VARIABILE PIU' IMPORTANTE, che stabilisce il modo setting o quello normale. boolean settingMode; //Variabili relative alle componenti della finestra RelativeLayout mainLayout; ScrollView scrollView; //per la creazione di un custom listener per il cambio modo setting/modo normale OnModeChangeListener mModeChangeListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //istanziazione del mainLayout mainLayout=(RelativeLayout)findViewById(R.id.mainLayout); //istanziazione delle immagini dei lucchetti lucchettoSinistro=(ImageView)findViewById(R.id.lucchettoSinistro); lucchettoDestro=(ImageView)findViewById(R.id.lucchettoDestro); //EVENT LISTENER DELLE VITI PER PASSARE A SETTINGMODE lucchettoListener = new View.OnLongClickListener() { boolean boolLucchettoSinistroAperto,boolLucchettoDestroAperto; @Override public boolean onLongClick(View v) { if(v==lucchettoSinistro){ if(boolLucchettoSinistroAperto==false){ lucchettoSinistro.setImageResource(R.drawable.lucaperto); boolLucchettoSinistroAperto=true; }else{ lucchettoSinistro.setImageResource(R.drawable.lucchiuso); boolLucchettoSinistroAperto=false; } } if(v==lucchettoDestro){ if(boolLucchettoDestroAperto==false){ lucchettoDestro.setImageResource(R.drawable.lucaperto); boolLucchettoDestroAperto=true; }else{ lucchettoDestro.setImageResource(R.drawable.lucchiuso); boolLucchettoDestroAperto=false; } } Vibrator vibrator =(Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(500); if(boolLucchettoSinistroAperto==true && boolLucchettoDestroAperto==true){ settingMode=true; } if(boolLucchettoSinistroAperto==false && boolLucchettoDestroAperto==false){ settingMode=false; } mModeChangeListener.onModeChange(settingMode); return true; } }; lucchettoSinistro.setOnLongClickListener(lucchettoListener); lucchettoDestro.setOnLongClickListener(lucchettoListener); //l'applicazione del setter del custom listener per la variabile settingMode setOnModeChangeListener(new OnModeChangeListener() { @Override public void onModeChange(boolean mode) { if(mode==false){ configuraNormalMode(); } else{ configuraSettingMode(); } } }); } //definizione del setter per il custom listener della variabile settingMode private void setOnModeChangeListener(OnModeChangeListener onModeChangeListener){ mModeChangeListener=onModeChangeListener; } // i metodi che configurano l'aspetto delle finestre per le due modalità setting e normale private void configuraSettingMode(){ mainLayout.setBackgroundColor(Color.GRAY); } private void configuraNormalMode(){ mainLayout.setBackgroundColor(Color.BLACK); } } //interfaccia per il Custom Listener del cambio della variabile settingMode. interface OnModeChangeListener{ public void onModeChange(boolean mode); }
Ora mi preoccuperei di mettere in salvo la variabile booleana settingMode tramite saveInstanceState.
Creo la funzione onSavedInstanceState.
@Override protected void onSaveInstanceState(Bundle state){ state.putSerializable("settingmode",settingMode); }e poi devo scegliere un punto di onCreate in cui riesumare il valore...
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState!=null && savedInstanceState.getSerializable("settingmode")!=null){ settingMode=(boolean)savedInstanceState.getSerializable("settingmode"); }Dovrebbe andar bene.
Posso fare delle prove introducendo una seconda activity...
Sempre problematico...
Idea! Invece di salvare settingMode posso salvare la posizione dei lucchetti!
Ciò si è rivelato vincente.
Scrivo qui tutto il codice fatto finora:
public class MainActivity extends AppCompatActivity { //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //DICHIARAZIONI DELLE VARIABILI //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //Dichiarazione del listener per i lucchetti View.OnLongClickListener lucchettoListener; //le immagini dei lucchetti per lo shiftaggio da e a settingMode ImageView lucchettoSinistro; ImageView lucchettoDestro; //lo stato dei lucchetti boolean boolLucchettoSinistroAperto,boolLucchettoDestroAperto; //LA VARIABILE PIU' IMPORTANTE, che stabilisce il modo setting o quello normale. boolean settingMode; //Variabili relative alle componenti della finestra RelativeLayout mainLayout; ScrollView scrollView; //per la creazione di un custom listener per il cambio modo setting/modo normale OnLucchettiChangeListener mLucchettiChangeListener; //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //Ripristino delle variabili con savedInstanceState if(savedInstanceState!=null){ if(savedInstanceState.getSerializable("boolLucchettoSinistroAperto")!=null) { boolLucchettoSinistroAperto = (boolean) savedInstanceState .getSerializable("boolLucchettoSinistroAperto"); } if(savedInstanceState.getSerializable("boolLucchettoDestroAperto")!=null) { boolLucchettoDestroAperto = (boolean) savedInstanceState .getSerializable("boolLucchettoDestroAperto"); } } //istanziazione del mainLayout mainLayout=(RelativeLayout)findViewById(R.id.mainLayout); //istanziazione delle immagini dei lucchetti lucchettoSinistro=(ImageView)findViewById(R.id.lucchettoSinistro); lucchettoDestro=(ImageView)findViewById(R.id.lucchettoDestro); //EVENT LISTENER DEI LUCCHETTI PER PASSARE A SETTINGMODE lucchettoListener = new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if(v==lucchettoSinistro){ boolLucchettoSinistroAperto=(boolLucchettoSinistroAperto==false? true : false); } if(v==lucchettoDestro){ boolLucchettoDestroAperto=(boolLucchettoDestroAperto==false? true : false); } Vibrator vibrator =(Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(500); mLucchettiChangeListener.onLucchettiChange(boolLucchettoSinistroAperto,boolLucchettoDestroAperto); return true; } }; lucchettoSinistro.setOnLongClickListener(lucchettoListener); lucchettoDestro.setOnLongClickListener(lucchettoListener); //l'applicazione del setter del custom listener per la variabile settingMode setOnLucchettiChangeListener(new OnLucchettiChangeListener() { @Override public void onLucchettiChange(boolean lucch1, boolean lucch2) { if(lucch1) lucchettoSinistro.setImageResource(R.drawable.lucaperto); else lucchettoSinistro.setImageResource(R.drawable.lucchiuso); if(lucch2) lucchettoDestro.setImageResource(R.drawable.lucaperto); else lucchettoDestro.setImageResource(R.drawable.lucchiuso); if(lucch1 && lucch2) { settingMode=true; configuraSettingMode(); } if(!lucch1 && !lucch2) { settingMode=false; configuraNormalMode(); } } }); //il LONG CLICK sul MAINLAYOUT per la visualizzazione di ImagePick mainLayout.setOnLongClickListener(new View.OnLongClickListener(){ @Override public boolean onLongClick(View view) { Intent intent=new Intent(getApplicationContext(),ImagePick.class); startActivity(intent); return false; } }); } //definizione del setter per il custom listener della variabile settingMode private void setOnLucchettiChangeListener(OnLucchettiChangeListener onLucchettiChangeListener){ mLucchettiChangeListener=onLucchettiChangeListener; } // i metodi che configurano l'aspetto delle finestre per le due modalità setting e normale private void configuraSettingMode(){ mainLayout.setBackgroundColor(Color.GRAY); } private void configuraNormalMode(){ mainLayout.setBackgroundColor(Color.BLACK); } //per il salvataggio delle variabili in saveInstanceState @Override protected void onSaveInstanceState(Bundle state){ super.onSaveInstanceState(state); state.putSerializable("boolLucchettoSinistroAperto",boolLucchettoSinistroAperto); state.putSerializable("boolLucchettoDestroAperto",boolLucchettoDestroAperto); } @Override protected void onStart(){ super.onStart(); mLucchettiChangeListener.onLucchettiChange(boolLucchettoSinistroAperto,boolLucchettoDestroAperto); System.out.println(settingMode); } } //interfaccia per il Custom Listener del cambio della variabile settingMode. interface OnLucchettiChangeListener{ public void onLucchettiChange(boolean lucch1, boolean lucch2); }
Nessun commento:
Posta un commento