Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
configuración del método genérico OnClickListener

Tengo una actividad que tiene diferentes TextView. Ahora, al hacer clic en cada TextView, debería abrir otra actividad. Implementé una forma genérica porque quería eliminar el código redundante. Entonces, solo quería preguntarle su opinión si estoy usando el concepto genérico en Java de manera correcta y si usaría un enfoque similar para configurar los oyentes en múltiples vistas en Android.

(Usé nombres genéricos con fines de demostración y no quería usar la declaración onClick en el diseño xml):

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView activity1 = (TextView) findViewById(R.id.activity1); TextView activity2 = (TextView) findViewById(R.id.activity2); TextView activity3 = (TextView) findViewById(R.id.activity3); TextView activity4 = (TextView) findViewById(R.id.activity4); setOnClickListener(activity1, Activity1.class); setOnClickListener(activity2, Activity2.class); setOnClickListener(activity3, Activity3.class); setOnClickListener(activity4, Activity4.class); } private void setOnClickListener (TextView textView, final Class<? extends AppCompatActivity> activityClass){ textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent activityIntent = new Intent(MainActivity.this, activityClass); startActivity(activityIntent); } }); }

}

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Recomendaría anular View.OnClickListener. Desacoplar el código de la actividad tiene el beneficio adicional de desacoplar su lógica de la propia actividad, por lo que podría usar GenericClickListener en diferentes contextos. Algo como esto:

 public class GenericClickListener implements View.OnClickListener { public GenericClickListener(Activity activity, Class<? extends AppCompatActivity> activityClass) { @Override public void onClick(View v) { Intent activityIntent = new Intent(activity, activityClass); startActivity(activityIntent); } } }

Y luego en tu método onCreate():

 TextView activity1 = (TextView) findViewById(R.id.activity1); TextView activity2 = (TextView) findViewById(R.id.activity2); TextView activity3 = (TextView) findViewById(R.id.activity3); TextView activity4 = (TextView) findViewById(R.id.activity4); activity1.setOnClickListener(new GenericClickListener(thia, Activity1.class)); activity2.setOnClickListener(new GenericClickListener(this, Activity2.class)); activity3.setOnClickListener(new GenericClickListener(this, Activity3.class)); activity4.setOnClickListener(new GenericClickListener(this, Activity4.class));

Aparte de eso, su implementación parece un enfoque razonable.

over 4 years ago · Santiago Trujillo Denunciar

0

si este código funciona, es un concepto bastante bueno. yo haría así

over 4 years ago · Santiago Trujillo Denunciar

0

Estaba creando mi propia solución para eso, y encontré este hilo mientras buscaba elementos existentes. El siguiente fragmento de código funciona (la respuesta de @RaceYouAnytime tiene algunos errores) y le permite usar Activity O Fragment para instanciar su StartActivity OnClickListener`

 public class StartActivityOnClickListener implements View.OnClickListener { private Activity sourceActivity; private Class<?> destinationActivityClass; /** * Constructor to use in Activities * */ public StartActivityOnClickListener(Activity srcActivity, Class<? extends AppCompatActivity> dstActivityClass) { this.sourceActivity = srcActivity; this.destinationActivityClass = dstActivityClass; } /** * Constructor to use in Fragments * */ public StartActivityOnClickListener(Fragment srcFragment, Class<? extends AppCompatActivity> dstActivityClass) { this.sourceActivity = srcFragment.getActivity(); this.destinationActivityClass = dstActivityClass; } /** * Overridden onClick() method building the Intent and calling startActivity() with it */ @Override public void onClick(View v) { sourceActivity.startActivity(new Intent(sourceActivity, destinationActivityClass)); } }

El uso sigue siendo el mismo, de la siguiente manera

 yourObject.setOnClickListener(new StartActivityOnClickListener(this, YourActivity.class));
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda