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

147
Vistas
setting OnClickListener generic method

I have an activity, that have different TextView's. Now, by clicking on each TextView it should open another activity. I implemented a generic way, because I wanted to remove redundant code. So I just wanted to ask about your opinion if I am using the generic-concept in java in a correct way and if you would use a similar approach to set Listeners to multiple Views in Android?

(I used generic names for demonstration purposes and I didnt want to use the onClick declaration on the xml-Layout):

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

I would recommend overriding View.OnClickListener. Decoupling the code from the Activity has the added benefit of decoupling your logic from the Activity itself, so you could use the GenericClickListener in different contexts. Something like this:

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);
        }
    } 
}

And then in your onCreate() method:

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));

Apart from that, your implementation seems like a reasonable approach.

over 4 years ago · Santiago Trujillo Denunciar

0

if this code work, it's a pretty good concept. I would do like this

over 4 years ago · Santiago Trujillo Denunciar

0

I was making my own solution for that, and I found this thread while checking for existing elements. The following piece of code works (@RaceYouAnytime answer has few mistakes), and allows you to use Activity OR Fragment to instanciate your StartActivityOnClickListener`

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));
    }
}

The usage stays the same, as follows

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