2012-03-06 37 views
7
package android.example; 

import android.app.Activity; 

import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class Android_eg1 extends Activity { 
    Button bt; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     bt=(Button)findViewById(R.id.click); 
     bt.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
      // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show(); 
      } 

     }); 
     } //onCreate() 

}//class 

Soy nuevo en Java y sé conceptos básicos de core java. Este es el programa de ejemplo que traté de conocer sobre el manejo del evento a través de una clase de botón. que no podía entender esta parte:setOnClickListener (nuevo OnClickListener() {})

"bt.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show(); 
     } 

    });" 

Dentro de la setOnClickListener (parámetro) ¿por qué están dando una definición de función (public void onClick (Ver v)})

Es esto aceptable?

Respuesta

6

En java, esta es una clase generada que implementa la interfaz. Puede generar una clase sobre la marcha dentro del argumento de la función o puede crear una clase externa y pasar una instancia de esta clase o implementar la interfaz que necesita su oyente mediante su actividad y pasar su actividad como oyente.

3

setOnClickListener toma un objeto OnClickListener como parámetro. Básicamente está creando una subclase anónima OnClickListener en el parámetro.

Es como el mismo en Java cuando se puede crear un nuevo hilo con una subclase anónima, por ejemplo:

Thread t = new Thread(new Runnable() 
    {  
     public void run(){...} 
    }); 
3

clic de los botones es un identificador de evento. Puede comprender claramente la diferencia si implementa el OnClickListner en lugar de utilizarlo en su código de ejemplo. Cuando implementa el OnClickListner su IDE muestra la opción de utilizar métodos no implementados relacionados con la interfaz OnClickListner. Ahí puede ver el método public void onClick. Si resumo el escenario;

  • tiene un botón
  • Usted debe tener una interfaz que escucha los eventos de botón - OnClickListner
  • Ajuste su evento botón para escuchar a los eventos de usuario - button.setOnClickListner(this)
  • ¿Qué desea hacer después de que el evento entre en el método onClick

Este full example code puede darle una comprensión clara sobre eso.

2

OnclickListener es una interfaz (Listener) y setOnClickListener() es un método que necesita un objeto de tipo onClickListener. Podemos crear clases de forma anónima. es decir, hecho llamando a una clase sin nombre (DECLARACIÓN DE CLASE ANÓNIMA) que implementa OnClickListener y, por lo tanto, tendrá que implementar el método onClick vacío. Por lo tanto, tendremos el objeto de tipo interfaz y esto se utiliza para la programación abreviada.Para obtener más espacio libre alrededor clase anónima visite http://www.techartifact.com/blogs/2009/08/anonymous-classes-in-java.html

0

función setOnClickListener con parámetro de tipo OnClickListener()

OnClickListener() es una interfaz: (analogía con C++ clase base abstracta)

el código:

bt.setOnClickListener(new OnClickListener() 

    /* this is the definition of anonymous class which implements OnClickListener() */  
    /* equivalent to : 
class OnClickListener_implementation implements OnClickListener */ 
    { 
      public void onClick(View v) 
         { 
          //your code here 
          } 

    ); 

Esto significa: construir un objeto de una clase que implementa la interfaz OnClickListener declarando el onClick como se especifica

Cuestiones relacionadas