Ecco: creo un'interfaccia che praticamente è quello che si vede nei setter già preconfezionati.
Provo ad abbozzare qualcosa.
Voglio un listener che mi si inneschi ogni qualvolta cambia una variabile:
Creo l'interfaccia:
public class MainActivity extends AppCompatActivity {
Button bttCambia;
Button bttModifica;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bttCambia = (Button) findViewById(R.id.button2);
bttModifica = (Button) findViewById(R.id.button3);
}
}
interface OnVariableChangeListener{
public void onVariableChange();
}
Poi creo una variabile del tipo di questa interfaccia fra le variabili del modulo:
public class MainActivity extends AppCompatActivity {
Button bttCambia;
Button bttModifica;
OnVariableChangeListener mVariableChangeListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bttCambia = (Button) findViewById(R.id.button2);
bttModifica = (Button) findViewById(R.id.button3);
}
}
interface OnVariableChangeListener{
public void onVariableChange();
}
Quindi creo il setter:
public class MainActivity extends AppCompatActivity {
Button bttCambia;
Button bttModifica;
OnVariableChangeListener mVariableChangeListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bttCambia = (Button) findViewById(R.id.button2);
bttModifica = (Button) findViewById(R.id.button3);
}
private void setOnVariableChangeListener(OnVariableChangeListener onVariableChangeListener){
mVariableChangeListener=onVariableChangeListener;
}
}
}
interface OnVariableChangeListener{
public void onVariableChange();
}
Praticamente ho attribuito il valore dell'interfaccia OnVariableChangeListener alla variabile.Quindi devo innescare il metodo onVariableChange() di mVariableChangeListener al momento opportuno.
Ma ora devo scrivere, nel corpo del metodo onCreate, l'implementazione del metodo dell'interfaccia.
public class MainActivity extends AppCompatActivity {
Button bttCambia;
Button bttModifica;
OnVariableChangeListener mVariableChangeListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bttCambia = (Button) findViewById(R.id.button2);
bttModifica = (Button) findViewById(R.id.button3);
setOnVariableChangeListener(new OnVariableChangeListener() {
@Override
public void onVariableChange() {
}
});
}
private void setOnVariableChangeListener(OnVariableChangeListener onVariableChangeListener){
mVariableChangeListener=onVariableChangeListener;
}
}
interface OnVariableChangeListener{
public void onVariableChange();
}
e devo gestire l'evento onVariableChange():
setOnVariableChangeListener(new OnVariableChangeListener() { @Override public void onVariableChange() { Toast.makeText(getApplicationContext(),"VARIABILE CAMBIATA",Toast.LENGTH_LONG).show(); } });Ecco: adesso scrivo la variabile e il codice che la modifica:
public class MainActivity extends AppCompatActivity { Button bttCambia; Button bttModifica; boolean variabile; OnVariableChangeListener mVariableChangeListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bttCambia = (Button) findViewById(R.id.button2); bttModifica = (Button) findViewById(R.id.button3); bttModifica.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { variabile=(variabile==true? false : true); mVariableChangeListener.onVariableChange(); } }); setOnVariableChangeListener(new OnVariableChangeListener() { @Override public void onVariableChange() { Toast.makeText(getApplicationContext(),"VARIABILE CAMBIATA",Toast.LENGTH_LONG).show(); } }); } private void setOnVariableChangeListener(OnVariableChangeListener onVariableChangeListener){ mVariableChangeListener=onVariableChangeListener; } } interface OnVariableChangeListener{ public void onVariableChange(); }Alla modificazione della variabile accompagno il codice che innesca l'evento.
Proviamo...
Funziona!
Ma facciamo di più: usiamo un parametro:
public class MainActivity extends AppCompatActivity { Button bttCambia; Button bttModifica; boolean variabile; OnVariableChangeListener mVariableChangeListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bttCambia = (Button) findViewById(R.id.button2); bttModifica = (Button) findViewById(R.id.button3); bttModifica.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { variabile=(variabile==true? false : true); mVariableChangeListener.onVariableChange(variabile); } }); setOnVariableChangeListener(new OnVariableChangeListener() { @Override public void onVariableChange(boolean b) { Toast.makeText(getApplicationContext(),"VARIABILE CAMBIATA "+b,Toast.LENGTH_LONG).show(); } }); } private void setOnVariableChangeListener(OnVariableChangeListener onVariableChangeListener){ mVariableChangeListener=onVariableChangeListener; } } interface OnVariableChangeListener{ public void onVariableChange(boolean b); }...in modo da mostrare il valore della variabile che è stata cambiata.
Provo...
E funziona perfettamente!
Nessun commento:
Posta un commento