[英]Have to click a button twice for it to work in Android Studio
所以我目前正在创建一个应用程序,一直困扰我的一件小事是我必须点击一个按钮两次才能工作。
这是我的代码,我看不出有什么问题:
public void signUpButtonClickAction(View v){
Button signUpButtonClick = (Button) findViewById(R.id.signUpButton);
signUpButtonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Signup.class));
}
});
}
我的按钮的 xml 代码:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/signUps"
android:id="@+id/signUpButton"
android:layout_marginBottom="38dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:onClick="signUpButtonClickAction"/>
这可能是一个小修复,但即使我也无法发现这个错误
解决方案
删除行android:onClick="signUpButtonClickAction"
并添加
Button signUpButtonClick = (Button) findViewById(R.id.signUpButton);
signUpButtonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Signup.class));
}
});
到onCreate
您活动的方法或onCreateView
您的片段方法。
替代方案
或者,将代码更改为此
public void signUpButtonClickAction(View v) {
startActivity(new Intent(MainActivity.this, Signup.class));
}
解释
xml 中的android:onClick="signUpButtonClickAction"
导致对 signUpButtonClick.setOnClickListener() 的内部调用,因此您不必再次在signUpButtonClickAction
中设置signUpButtonClickAction
。
初始化多个按钮
private void initializeButtons() {
Button signUpButtonClick = (Button) findViewById(R.id.signUpButton);
signUpButtonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Signup.class));
}
});
Button anotherButton = (Button) findViewById(R.id.anotherButton);
anotherButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("TAG", "Clicked on another button!");
}
});
}
现在只需从活动的onCreate
方法调用initializeButtons()
即可。
问题是您设置了两次 onClick 操作。 在您的 xml 代码中,您只需将 onClick() 分配给您的按钮,您无需在signUpButtonClickAction(View v)
内设置signUpButtonClickAction(View v)
。 您有两个选择:
将 xml 文件保持signUpButtonClickAction(View v)
,在signUpButtonClickAction(View v)
执行以下操作:
public void signUpButtonClickAction(View v){
startActivity(new Intent(MainActivity.this, Signup.class));
}
或者
删除您的 xml 文件的 onClick:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/signUps"
android:id="@+id/signUpButton"
android:layout_marginBottom="38dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
/>
并在您的活动中执行此操作:
Button yourButton = (Button) findViewById(R.id.signUpButton);
yourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Signup.class));
}
});
问题的原因是: onclick()
和onClickListener
字面上是一样的! 并且您正在实现两者,最终结果是您需要按两次按钮才能启动活动!
使固定:
您的问题的解决方案是:
1:
public void signUpButtonClickAction(View v)
{
startActivity(new Intent(MainActivity.this, Signup.class));
}
2:
Button signUpButtonClick = (Button) findViewById(R.id.signUpButton);
signUpButtonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Signup.class));
}
});
正如 mcwise 所说 android:onClick="signUpButtonClickAction" 和 signUpButtonClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Signup.class)); } }) ; 做同样的事情。 所以你必须和其中一个一起去。 有两个是导致问题的原因
可能涉及的人:我遇到了同样的问题,但上述解决方案均未解决。 出于某种原因,我无法理解,我的按钮中有这行代码:
android:textIsSelectable="true"
从按钮中删除此属性使其工作。
这显然是第一次点击选择文本,第二次点击触发了 onClick 按钮。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.