JavascriptProva

domenica 4 settembre 2016

Ripasso dei custom listeners per un custom listener che capti le modificazioni di una variabile.

Ho bisogno di esercitarmi ancora nella creazione di listeners personalizzati.

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