Java 必须单击两次按钮才能在Android Studio中工作
因此,我目前正在创建一个应用程序,一直困扰我的一个小问题是,我必须点击两次按钮,它才能工作 这是我的代码,我看不出有什么问题:Java 必须单击两次按钮才能在Android Studio中工作,java,android,android-activity,android-view,onclicklistener,Java,Android,Android Activity,Android View,Onclicklistener,因此,我目前正在创建一个应用程序,一直困扰我的一个小问题是,我必须点击两次按钮,它才能工作 这是我的代码,我看不出有什么问题: public void signUpButtonClickAction(View v){ Button signUpButtonClick = (Button) findViewById(R.id.signUpButton); signUpButtonClick.setOnClickListener(new View.OnClickListener()
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
中设置onClickListener
初始化多个按钮
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(视图v)
中设置onclicklistener()。您有两个选择:
将xml文件保持原样并放在signUpButtonClickAction(视图v)
do内:
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"
/>
问题的原因是:
onclick()
和onClickListener
实际上是一样的!如果您同时实现了这两个功能,最终结果是您需要按两次按钮才能开始活动
public void signUpButtonClickAction(View v)
{
startActivity(new Intent(MainActivity.this, Signup.class));
}
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));
}
});
您的问题的解决方案是:
1:
public void signUpButtonClickAction(View v)
{
startActivity(new Intent(MainActivity.this, Signup.class));
}
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));
}
});
2:
public void signUpButtonClickAction(View v)
{
startActivity(new Intent(MainActivity.this, Signup.class));
}
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(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startActivity(新意图(MainActivity.this、Signup.class));
}
});
做同样的事情。所以你必须和他们中的一个一起去。这两种情况都会导致可能与之相关的问题:
我也有同样的问题,但上面的解决方案都没有解决。
出于某种原因,我无法理解,我的按钮中有一行代码:
android:textIsSelectable=“true”
从按钮中删除此属性可使其正常工作
这显然是第一次点击选择文本,第二次点击触发了onClick按钮 您好,为什么要删除
onClickListener
?我认为它是另一种方式,但现在我对为什么没有侦听器感到困惑:/您所做的是在第一次单击按钮时设置一个新的onClickListener。如果您在xml中使用的是android:onClick=“signUpButtonClickAction”,Android已经在内部将onClickListener设置为您指定的方法—本例中为signUpButtonClickAction。@SamuelGeorgeszusz侦听器由框架设置,并调用您在Android:onClick
@SamuelGeorgeszusz中提到的方法,即“Android:onClick=”signUpButtonClickAction”行'确保在单击注册按钮时调用侦听器函数。请参见。谢谢你的解释,这很有道理。我从来不知道android:onClick=“signUpButtonClickAction”会对监听器进行函数调用。现在我知道了,正如你解释得很好,也不粗鲁,所以我投了赞成票,接受了你的回答:)谢谢你回答我的问题。我仍然会投票支持你的答案,因为我已经接受了先前的答案。只是出于兴趣,我如何编程一个按钮,让它询问用户是否还想回去?我不确定我是否理解您的问题,无论您希望在按下按钮时执行什么操作,都必须将其写入onClick()中。这将取决于您正尝试执行的操作,但作为一个示例,您可以使用可见性视图创建线性布局。GONE
,当您单击按钮时,您可以将线性布局的可见性更改为视图。VISIBLE
,其中包含两个按钮,一个用于返回,另一个用于移动到下一个活动,