Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 必须单击两次按钮才能在Android Studio中工作_Java_Android_Android Activity_Android View_Onclicklistener - Fatal编程技术网

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
,其中包含两个按钮,一个用于返回,另一个用于移动到下一个活动,