Joseph Siccita
Joseph Siccita

Reputation: 53

Buttons only work when used after one another

So I've got multiple buttons in one activity, and I can only use them one after another. I've read I need to do something with the (OnClickListener) part but I'm unsure what or how to do it. Any help is greatly appreciated. Code is below:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main2Activity extends AppCompatActivity {

private Button B3;
private Button B4;
private Button B5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    B3 = findViewById(R.id.button3);

    B3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            moveToDanceScheduleMenu();
        }
    });
}
private void moveToDanceScheduleMenu () {

    Intent intent = new Intent(Main2Activity.this, DanceScheduleMenu.class);
    startActivity(intent);

    B4 = findViewById(R.id.button10);

    B4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            moveToWhatsOn();
        }
    });
}
private void moveToWhatsOn () {

    Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
    startActivity(intent);

    B5 = findViewById(R.id.button11);

    B5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            moveToMainResultsMenu();
        }
    });
}

EDIT: thanks guys for all the help- out at the moment so when I get home I’ll test these. They look very similar to what I’ve read so they should work.. thanks!

Upvotes: 0

Views: 88

Answers (6)

Fahed Hermoza
Fahed Hermoza

Reputation: 363

There are several ways to interact with the buttons:

First method: Class implementation

public class Main2Activity extends AppCompatActivity implements OnClickListener {
private Button B3;
private Button B4;
private Button B5;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

B3 = findViewById(R.id.button3);
B4 = findViewById(R.id.button10);
B5 = findViewById(R.id.button11);
B3.setOnClickListener(this);
B4.setOnClickListener(this);
B5.setOnClickListener(this);
}

public void onClick(View v){

 if(v.getId()==B3.getId()){
    moveToDanceScheduleMenu();
  }else if(v.getId()==B4.getId()){
    moveToWhatsOn();
  }else if(v.getId()==B5.getId()){
    moveToMainResultsMenu();
  }
}

private void moveToDanceScheduleMenu () {
Intent intent = new Intent(Main2Activity.this,DanceScheduleMenu.class);
startActivity(intent);
}

private void moveToWhatsOn () {
Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
startActivity(intent);
}

Second Method: Private variable (large blocks)

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

findViewById(R.id.button3).setOnClickListener(mGlobal_OnClickListener);
findViewById(R.id.button10).setOnClickListener(mGlobal_OnClickListener);
findViewById(R.id.button11).setOnClickListener(mGlobal_OnClickListener);

}

//Global On click listener for all views
final OnClickListener mGlobal_OnClickListener = new OnClickListener() {
    public void onClick(final View v) {
        switch(v.getId()) {
            case R.id.button3:
            moveToDanceScheduleMenu();                   
            break;

            case R.id.button10:
            moveToWhatsOn();                   
            break;

            case R.id.button11:
            moveToDanceScheduleMenu();                   
            break;
        }
    }
};

private void moveToDanceScheduleMenu () {
Intent intent = new Intent(Main2Activity.this,DanceScheduleMenu.class);
startActivity(intent);
}

private void moveToWhatsOn () {
Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
startActivity(intent);
}

Third Method: Online (small blocks)

public class Main2Activity extends AppCompatActivity{

private Button B3;
private Button B4;
private Button B5;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

 B3 = findViewById(R.id.button3);
 B4 = findViewById(R.id.button10);
 B5 = findViewById(R.id.button11);

 B3.setOnClickListener( new View.OnClickListener() {
 @Override
 public void onClick(View v) {
     moveToDanceScheduleMenu();
    }
  });

 B4.setOnClickListener( new View.OnClickListener() {
 @Override
 public void onClick(View v) {
     moveToWhatsOn();
   }
  });

 B5.setOnClickListener( new View.OnClickListener() {
 @Override
 public void onClick(View v) {
     moveToDanceScheduleMenu();
   }
  });

}

private void moveToDanceScheduleMenu () {
Intent intent = new Intent(Main2Activity.this,DanceScheduleMenu.class);
startActivity(intent);
}

private void moveToWhatsOn () {
Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
startActivity(intent);
}

Upvotes: 0

Matt
Matt

Reputation: 3190

You are setting your click listeners sequentially. If you want all the buttons to be clickable at any time, move the listeners into your onCreate():

protected void onCreate() {
    B3.setOnClickListener(){};
    B4.setOnClickListner(){};
    // etc.
}

A click listener is just that – it "listens" for clicks. Your B3, for example, is the only one listening when the Activity gets created, so all the other buttons will ignore your clicks on them. When B3 is clicked, moveToDanceScheduleMenu() is invoked and B4 starts listening.

I hope that clears things up a bit.


Complete code:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main2Activity extends AppCompatActivity {
    private Button B3;
    private Button B4;
    private Button B5;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        B3 = findViewById(R.id.button3);
        B3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                moveToDanceScheduleMenu();
            }
        });

        B4 = findViewById(R.id.button10);
        B4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                moveToWhatsOn();
            }
        });

        B5 = findViewById(R.id.button11);
        B5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                moveToMainResultsMenu();
            }
        });
    }
    private void moveToDanceScheduleMenu () {
        Intent intent = new Intent(Main2Activity.this, DanceScheduleMenu.class);
        startActivity(intent);
    }

    private void moveToWhatsOn () {
        Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
        startActivity(intent);
    }
}

Upvotes: 2

gmMustafa
gmMustafa

Reputation: 11

You are making Buttons depended of other Buttons in a Sequential order. Try Binding Button and their OnclickListners in oncreate.Like this.

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);

            B3 = findViewById(R.id.button3);
            B4 = findViewById(R.id.button10);
            B5 = findViewById(R.id.button11);


            B3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    moveToDanceScheduleMenu();
                }
            });

            B4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    moveToWhatsOn();
                }
            });

            B5.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    moveToMainResultsMenu();
                }
            }); 
        }

Upvotes: 1

Ali Ahmed
Ali Ahmed

Reputation: 2178

You can put all your code in OnCreate() method like this

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main2Activity extends AppCompatActivity {

    private Button B3;
    private Button B4;
    private Button B5;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        B3 = findViewById(R.id.button3);
        B4 = findViewById(R.id.button10);
        B5 = findViewById(R.id.button11);

        B3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main2Activity.this, DanceScheduleMenu.class);
                startActivity(intent);
            }
        });

        B4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
                startActivity(intent);
            }
        });

        B5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                moveToMainResultsMenu();
            }
        });

    }

Upvotes: 1

Beasteca
Beasteca

Reputation: 103

If you want to use a button only after a previous button was pressed, you should disable all next buttons in the begining in the onCreate() method and enable them later when the previous button was pressed

  B3.setEnabled(true);
  B4.setEnabled(false);
  B5.setEnabled(false);

And then enable the next button after onClick

        B3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                moveToDanceScheduleMenu();
                B4.setEnabled(true);
            }
        });

And as far for your code

public class Main2Activity extends AppCompatActivity {

    private Button B3;
    private Button B4;
    private Button B5;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        B3 = findViewById(R.id.button3);
        B4 = findViewById(R.id.button10);
        B5 = findViewById(R.id.button11);



        B3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                moveToDanceScheduleMenu();

            }
        });


        B4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                moveToWhatsOn();
            }
        });


        B5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                moveToMainResultsMenu();
            }
        });
    }

    private void moveToDanceScheduleMenu() {

        Intent intent = new Intent(Main2Activity.this, DanceScheduleMenu.class);
        startActivity(intent);


    }

    private void moveToWhatsOn() {

        Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
        startActivity(intent);


    }
}

Upvotes: 0

Tarek Taamalli
Tarek Taamalli

Reputation: 135

I think this code is work

public class Main2Activity extends AppCompatActivity {

private Button B3;
private Button B4;
private Button B5;
private a=false,b=false;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    B3 = findViewById(R.id.button3);

    B3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            moveToDanceScheduleMenu();
             a=true ;
        }
    });
}
private void moveToDanceScheduleMenu () {

    Intent intent = new Intent(Main2Activity.this, DanceScheduleMenu.class);
    startActivity(intent);


}
 B4 = findViewById(R.id.button10);

    B4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          if(a==true ){
            moveToWhatsOn();
           } 
        }
    });
private void moveToWhatsOn () {

    Intent intent = new Intent(Main2Activity.this, WhatsOn.class);
    startActivity(intent);
        b=true ;
    B5 = findViewById(R.id.button11);
}

    B5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           if(b==true){
            moveToMainResultsMenu();
}
        }
    });
}

Upvotes: 0

Related Questions