Search code examples
androidonclicklistener

Best practice for setOnClickListener in custom nav drawer


I am using a custom nav drawer in my app. For switching activities, I am using setOnClickListener for each button. But i think that might consume a lot of memory as the same code is to be loaded in each activity every time. So is there any efficient way to handle on click listener for menu like switch case?

My code for nav-item clicks.

 Button oneButton = (Button) findViewById(R.id.nav_one);
    Button twoButton = (Button) findViewById(R.id.nav_two);
    Button threeButton = (Button) findViewById(R.id.nav_three);
    Button fourButton = (Button) findViewById(R.id.nav_four);
    Button fiveeButton = (Button) findViewById(R.id.nav_five);

        oneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);

        Intent firstIntent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(firstIntent);
        }
        });

        twoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);

        Intent secondIntent = new Intent(getApplicationContext(), SecondActivity.class);
        startActivity(secondIntent);

        }
        });

        threeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);

        Intent threeButton = new Intent(getApplicationContext(), ThirdActivity.class);
        startActivity(thirdIntent);

        }
        });

        threeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);

        Intent fourButton = new Intent(getApplicationContext(), FouthActivity.class);
        startActivity(fourthIntent);

        }
        });

        fourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);

        Intent fiveButton = new Intent(getApplicationContext(), FifthouthActivity.class);
        startActivity(fifthIntent);
        }
        });

Solution

  • Use this method , it may help you

    Don't forget to add this

    class YourClass ... implements View.OnClickListener
    
        onCreate {
            Button oneButton = (Button) findViewById(R.id.nav_one);
            Button twoButton = (Button) findViewById(R.id.nav_two);
            Button threeButton = (Button) findViewById(R.id.nav_three);
            Button fourButton = (Button) findViewById(R.id.nav_four);
            Button fiveeButton = (Button) findViewById(R.id.nav_five);
    
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    
            oneButton.setOnClickListener(this);
            twoButton .setOnClickListener(this);
            threeButton .setOnClickListener(this);
            fourButton .setOnClickListener(this);
            fiveeButton .setOnClickListener(this);
        }//onCreate method ends here
    
        @Override
        public void onClick(View view) {
    
            switch (view.getId())
            {
    
                case R.id.nav_one:
                    drawer.closeDrawer(GravityCompat.START);
    
                    Intent firstIntent = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(firstIntent);
                    break;
                case R.id.nav_two:
                   //same way other buttons also
    
            }
        }