Che funzioni svolge questo listener?
Quando accade qualcosa che modifica lo status dell'applicazione, accade questo:
mLucchettiChangeListener.onLucchettiChange(leftLock,rightLock);Ossia viene attivato il metodo della variabile che rappresenta l'interfaccia, portando come parametri gli status dei due lucchetti sinistro e destro.
Viene triggerato il metodo onLucchettiChange, che porta come parametri gli status dei due lucchetti.
L'interfaccia è questa:
//interfaccia per il Custom Listener del cambio della variabile settingMode. interface OnLucchettiChangeListener{ public void onLucchettiChange(boolean lucch1, boolean lucch2); }e la definizione del setter è questa:
//definizione del setter per il custom listener della variabile settingMode private void setOnLucchettiChangeListener(OnLucchettiChangeListener onLucchettiChangeListener){ mLucchettiChangeListener=onLucchettiChangeListener; }Una volta, quindi, che mLucchettiChangeListener è stata assimilata all'interfaccia, avente un metodo con due parametri booleani, si può triggerare questo metodo fornendovi i due parametri.
Il setter dice che lo status SettingMode varia a seconda dello stato dei due parametri.
Il codice funziona in modo diverso a seconda dell'API.
Mi scrivo tutto onCreate:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //istanziazione dell'oggetto helper: helper=new Helper(this); //istanziazione del mainLayout e della barra delle categorie (didascalia sotto) mainLayout=(RelativeLayout)findViewById(R.id.mainLayout); scrollView=(ScrollView)findViewById(R.id.scrollView); txtBarraCategoria=(TextView)findViewById(R.id.txtBarraCategoria); //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){ leftLock=(leftLock==false? true : false); } if(v==lucchettoDestro){ rightLock=(rightLock==false? true : false); } Vibrator vibrator =(Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(500); mLucchettiChangeListener.onLucchettiChange(leftLock,rightLock); 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; mainLayout.setBackgroundColor(Color.GRAY); } if(!lucch1 && !lucch2) { settingMode=false; mainLayout.setBackgroundColor(Color.BLACK); } } }); //MAINLAYOUT.ONTOUCHLISTENER mainLayout.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View view, MotionEvent event) { mlX=(int)event.getX(); mlY=(int)event.getY(); return false; } }); //il LONG CLICK sul MAINLAYOUT per la visualizzazione di ImagePick mainLayout.setOnLongClickListener(new View.OnLongClickListener(){ @Override public boolean onLongClick(View view) { if(!settingMode) return false; Intent intent=new Intent(getApplicationContext(),ImagePick.class); intent.putExtra("Categoria","iniziale"); intent.putExtra("CoordX",mlX); intent.putExtra("CoordY",mlY); startActivity(intent); return true; } }); }Ecco onStart:
@Override protected void onStart(){ super.onStart(); mLucchettiChangeListener.onLucchettiChange(leftLock,rightLock); Toast.makeText(getApplicationContext(),leftLock+" "+rightLock,Toast.LENGTH_LONG).show(); refreshScreen(); }Ci ho messo il Toast per vedere in che stato si trovano le variabili leftLock e rightLock che esprimono lo stato di apertura dei lucchetti, e in un telefono si trovano in false mentre in un altro (API 22) si trovano in true.
Evidentemente il sistema operativo più moderno non ha bisogno di salvare le impostazioni quando l'activity venga ridotta allo stato stopped.
Provo a salvare per risolvere il bug sul cellulare più antico.
Ci metto intanto questo metodo:
@Override public void onSaveInstanceState(Bundle savedInstanceState){ savedInstanceState.putBoolean("leftLock",leftLock); savedInstanceState.putBoolean("rightLock",rightLock); }E lo recupero in onCreate:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState!=null){ leftLock=savedInstanceState.getBoolean("leftLock"); rightLock=savedInstanceState.getBoolean("rightLock"); }Ecco, adesso sia con l'API 19 che con l'API 22 la funzionalità è la stessa!
Nessun commento:
Posta un commento