A ver, con el código que has puesto sería más correcto el primer método, aunque ambos métodos son correctos.
Y ahora te explico la diferencia, en el segundo método tienes una condición de que solo se ejecute el código si el botón que has pulsado es boton1 (eso es lo que hace el switch), pero el código lo estás asociando directamente a boton1, con lo cual es redundante y sobra.
Y ahora, ¿para que sirve entonces ese switch?
El método setOnClickListener recibe como parametro un objeto de tipo OnClickListener, el cual puede estar ya definido a priori, y así usar el mismo código para varios botones, lo que ocurre es que la mayoría de la gente (y yo me incluyo) lo asociamos directamente al botón poniendo el new OnClickListener() en el método setOnClickListener.
Así que ese switch solo tiene sentido en un caso como el siguiente:
Código:
OnClickListener click = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.boton1:
Intent intent = new Intent(Uno.this, Dos.class);
startActivity(intent);
finish();
break;
case R.id.boton2:
Intent intent = new Intent(Uno.this, Tres.class);
startActivity(intent);
finish();
break;
}
}
};
boton1.setOnClickListener(click);
boton2.setOnClickListener(click);
Este código usa el mismo OnClickListener, pero según el botón que haya ejecutado el código se ejecutará un código u otro.
Espero haberte aclarado la duda.