Vista de Android comparando dos vistas de igualdad

Tengo 4 botones en una disposición, y para cada uno de los botones, tienen el atributo:

android:onClick="numberChosen"

Ahora, lo que había planeado hacer era que en mi actividad (que utiliza un diseño que tiene los 4 botones), tengo algo así como:

 public class Blah extends Activity{ String fileName; Button one; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_number_players_selection_screen); one = (Button) findViewById(R.id.number_players_one); } public void numberChosen(View v){ if(v == one){ // <-------- first way System.out.println("first way"); } if(v.getId()==R.id.number_players_one){ // <-------- second way System.out.println("second way"); } } } 

Si tomas nota de lo que ocurre en el método numberChosen , entre estas dos formas, ¿cuál es mejor? O ambos están haciendo exactamente lo mismo?

En una nota lateral, está haciendo android:onClick="numberChosen" mejor o peor que simplemente establecer el View.onClickListener en View.onClickListener lugar?

Desde mi punto de vista, ambas maneras son correctas, se hacen el trabajo. Desde el punto de vista de rendimiento, la segunda forma podría ser mejor.

Además, al igual que algunos sugieren, el uso de la casilla de conmutación podría no ser posible si está utilizando ADT 14 o superior, en un proyecto de biblioteca, ya que los ID no son finales (constantes), por lo que sólo tiene que utilizar las sentencias en ese caso .

Estoy utilizando min SDK 14 y esta solución no funciona en algunos casos (trabajo sólo para la primera fila de mi adaptador de lista)

 findViewById(R.id.item_icon_favourite) == view 

Se resuelven comparando con IDs

 R.id.item_icon_favourite == view.getId() 

Le sugiero que utilice la caja de switch es más legible.Its no importa el tiempo que está utilizando android:onClick="numberChosen" o View.onClickListener()

  public class Blah extends Activity implements OnClickListener{ String fileName; Button one; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_number_players_selection_screen); one = (Button) findViewById(R.id.number_players_one); one..setOnClickListener(this); // way 1 to do that // more better way would be customized for whole app **one..setOnClickListener(new MyClickListener());** } /** The click event observer pattern for the different items on the view * * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.number_players_one: // best way 1 break; default : break; } } } 

Una implementación más personalizada puede tener un oyente personalizado para diferentes secciones en la aplicación como:

 public class MyClickListener implements OnClickListener { private Context mContext; @Override public void onClick(View v) { mContext = v.getContext(); switch (v.getId()) { case R.id.number_players_one: // best way 2 and more better among all break; default: break; } } } 
  • Cómo configurar android: orientation = "horizontal" programmatically in RelativeLayout?
  • Superponer imagen sobre otro android
  • GetMeasuredHeight () de TextView con el texto incluido
  • Android weightSum no funciona correctamente
  • LinearLayout con divisores en pre Honeycomb
  • Cómo limitar la altura de la vista desplegable de Spinner en Android
  • FragmentTabHost: No se conoce ninguna pestaña null
  • Cómo aplicar imágenes de paisaje a gran escala
  • Cómo determinar la dirección de desplazamiento de ListView
  • Los márgenes no funcionan
  • TextInputLayout no se muestra cuando se agrega programativamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.