Android如何实现可多次点击按钮?解决按钮仅单次点击问题
解决Android按钮仅能点击一次的问题
开发学习用Android应用时,遇到按钮点击一次后,二次点击界面无明显变化的问题,相关代码如下:
XML布局代码
<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" />
Java点击事件代码
buttonGenerate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { passwordText.setText(generate()); } });
generate方法代码
private String generate () { Random random = new Random(); int character; while (password.length() < 16) { character = random.nextInt(76); password += characters[character]; } return password; }
相关成员变量
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 = "";
问题原因
按钮本身可正常点击,但类成员变量password在第一次调用generate()后长度已达到16,后续点击调用generate()时,while (password.length() < 16)条件不成立,直接返回原有字符串,导致界面显示无变化,看起来像按钮无法二次点击。
解决方案
修改generate()方法,确保每次调用都生成新密码,两种可行方案:
方案1:使用局部变量(推荐)
将password改为方法内的局部变量,每次调用方法时重新初始化:
private String generate () { String password = ""; Random random = new Random(); int character; while (password.length() < 16) { character = random.nextInt(76); password += characters[character]; } return password; }
方案2:重置成员变量
每次生成密码前,将类成员password重置为空:
private String generate () { password = ""; Random random = new Random(); int character; while (password.length() < 16) { character = random.nextInt(76); password += characters[character]; } return password; }
两种方案都能保证每次点击按钮时,生成全新的16位密码,界面会同步更新。
内容的提问来源于stack exchange,提问作者Orhan Gazi BARAK
相关产品推荐
相关产品推荐

