Skip to content
Advertisement

How can I create a button for clickable many times on android?

I triying make a android app for learning but my buttons clickable only once. I can’t click second time. Here is my codes for button.

There is the xml codes:

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:width="200dp"
    android:height="80dp"
    android:shadowColor="@color/red"
    android:text="@string/button"
    android:textColor="@color/black"
    android:textSize="20sp"
    android:visibility="visible"
    app:cornerRadius="100dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/text"
    app:rippleColor="@color/red"
    app:strokeColor="@color/red"
    tools:ignore="TextContrastCheck" />

And there is java codes:

buttonGenerate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        passwordText.setText(generate());
    }
});

There is generate method:

private String generate () {
Random random = new Random();
int character;
while (password.length() < 16) {
character = random.nextInt(76);
password += characters[character];
}
return password;

There is variables:

private final String[] characters = {
"A" , "B" , "C" , "D" , "E" , "F" , "G" , "H",
"I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" ,
"U" , "V" , "W" , "X" , "Y" , "Z", "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h",
"i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t" ,"u" , "v" , "w" , "x" , "y" , "z", "0" , "1" , "2" , "3" , "4" , "5" , "6" ,
"7" , "8" , "9", "!" , "#" , "'" , "+" , "%" , "(" , ")" , "&" ,
"=" , "?" , "*" , "-" , "$" , "{" , "}" };
private String password = "";

Advertisement

Answer

After calling generate() the first time password.length() < 16 will always be false. Put String password inside generate():

private String generate () {
String password = "";
Random random = new Random();
int character;
while (password.length() < 16) {
character = random.nextInt(76);
password += characters[character];
}
return password;}
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement