Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

155
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

0

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

over 4 years ago · Santiago Trujillo Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda