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

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

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

0

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

over 4 years ago · Santiago Trujillo Relatório

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