Pues es lo mismo, solo que registras y declaras el código que se ejecutará en la misma línea.
poner en onCreate():
Código:
button1.setOnClickListener(button1Listener);
y un método fuera de onCreate() pero en la misma actividad:
Código:
private OnClickListener button1Listener = new OnClickListener() {
public void onClick(View v) {
//pones el codigo que necesites
}
};
es lo mismo que lo que has puesto tú poniendo todo el código dentro de onCreate():
Código:
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
funcion_que_sea();
}
});
La otra línea que pones es necesaria en ambos casos(yo la omití)
Código:
Button button1 = (Button) findViewById(R.id.button1);
y sirve para poder referenciar el objeto button1, es algo así como que busca un objeto en el layout que tenga de Id=R.id.button1 y te devuelve una referencia para que tú puedas cambiar sus características. Es totalmente necesaria si vas a trabajar con un objeto pues necesitas su referencia pero que si no fueras a hacer nada con él no necesitas. Es simplemente como pedir una dirección para saber donde esta el objeto que estas modificando. Para entender más esto busca punteros en C++.