Hay 2 formas de manejar el evento de clic en el botón
- Al hacer clic en el diseño xml
- Usando un OnClickListener
Al hacer clic en el diseño XML
Cuando el usuario hace clic en un botón, el objeto Button recibe un evento de clic.
Para hacer que el evento de clic funcione, agregue android:onClick
un atributo al elemento Botón en su diseño XML. El valor de este atributo debe ser el nombre del método al que desea llamar en respuesta a un evento de clic. La actividad que aloja el diseño debe implementar el método correspondiente.
NOTA:
Si usa este controlador de eventos en su código, asegúrese de tener ese botón en su MainActivity. No funcionará si usa este controlador de eventos en un fragmento porque el atributo onClick solo funciona en Activity o MainActivity.
Ejemplo:
<Button xmlns:android="http:// schemas.android.com/apk/res/android" android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" />
En la clase MainActivity
/** Called when the user touches the button */ public void sendMessage(View view) { // Do something in response to button click }
Asegúrese de que su método sendMessage tenga lo siguiente:
Usando un OnClickListener
También puede declarar el controlador de eventos de clic mediante programación en lugar de en un diseño XML. Este código de controlador de eventos se prefiere principalmente porque se puede usar tanto en actividades como en fragmentos.
Hay dos formas de hacer este controlador de eventos programáticamente:
- Implementando View.OnClickListener en su actividad o fragmento.
- Creando un nuevo View.OnClickListener anónimo.
Implementando View.OnClickListener en su actividad o fragmento
Para implementar View.OnClickListener
en su Actividad o Fragmento, debe anular onClick
el método en su clase.
En primer lugar, vincule el botón en el diseño xml a java llamando al findViewById()
método. R.id.button_send
hace referencia al botón en XML.
mButton.setOnClickListener(this);
significa que desea asignar un oyente para su botón «en esta instancia» que representa esta instancia OnClickListener
y, por esta razón, su clase debe implementar esa interfaz.
<RelativeLayout xmlns:android="http:// schemas.android.com/apk/res/android" xmlns:app="http:// schemas.android.com/apk/res-auto" xmlns:tools="http:// schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.sample.MainActivity" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button_send" /> </RelativeLayout>
Código de actividad principal:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = findViewById(R.id.button_send); mButton.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.button_send: // Do something } } }
Si tiene más de un evento de clic de botón, puede usar mayúsculas y minúsculas para identificar en qué botón se hace clic.
Creación de View.OnClickListener anónimo
Vincule el botón del XML llamando al findViewById()
método y configure el oyente onClick usando el setOnClickListener()
método.
Código de actividad principal:
public class MainActivity extends AppCompatActivity { private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = findViewById(R.id.button_send); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Do something } }); } }
setOnClickListener
toma un OnClickListener
objeto como parámetro. Básicamente, está creando una subclase anónima OnClickListener en el parámetro.
Es como lo mismo en Java cuando puedes crear un nuevo hilo con una subclase anónima.
Publicación traducida automáticamente
Artículo escrito por Vijayaraghavan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA