Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

145
Views
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 answers
Answer question

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 Report

0

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

over 4 years ago · Santiago Trujillo Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!