按钮仅在第二次单击时起作用

Button working only on second click

我有一个简单但烦人的问题:

在我的片段中,我有一个按钮,点击它应该会打开另一个 activity(意图)。但是,我必须单击该按钮两次,只有第二次它才打开 activity。 这是按钮的 xml 布局:

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go!"
        android:onClick="login"
        android:id="@+id/bt_SignIn"
        android:layout_below="@+id/pass"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp" />

这里是 onClick 的代码:

public void login(View view){
bt_SignIn = (Button) findViewById(R.id.bt_SignIn);
     bt_SignIn.setOnClickListener(new View.OnClickListener() {
     @Override
            public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(), Frontpage.class);
                    startActivity(i);
         }
     }
}

你应该避免在 XML 中直接使用 onClick,这是一个 bad idea

从 XML 中删除 onClick:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Go!"
    android:id="@+id/bt_SignIn"
    android:layout_below="@+id/pass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="70dp" />

将此代码放入您的 Activity:

onCreate
bt_SignIn = (Button) findViewById(R.id.bt_SignIn);
bt_SignIn.setOnClickListener(new View.OnClickListener() {
@Override
    public void onClick(View view) {
        Intent i = new Intent(getApplicationContext(), Frontpage.class);
        startActivity(i);
    }
}

为什么要再次为 btn_signIn 定义 Onclick 侦听器?正如您已经在 xml 中定义的那样,登录方法将在单击按钮时调用。

仅使用以下代码。

public void login(View view) {
    Intent i = new Intent(getApplicationContext(), Frontpage.class);
    startActivity(i);
}

这是因为在 xml 中定义的函数中,您正在为按钮设置侦听器。从 JAVA 代码或 xml 代码执行此操作。

这就够了

public void login(View view) {
    Intent i = new Intent(getApplicationContext(), Frontpage.class);
    startActivity(i);
}

之前发生的事情是,在第一次点击时,xml 中定义的函数被调用,这反过来又为按钮设置了监听器,所以在下一次点击你的 activity被触发

您为按钮设置了两次 onClick 侦听器。您在 XML 中声明了 onClick,这样您的方法就可以了。

public void login(View view){
     Intent i = new Intent(getApplicationContext(), Frontpage.class);
     startActivity(i);
}

改变你的login(View view)方法如下

public void login(View view){
    Intent i = new Intent(getApplicationContext(), Frontpage.class);
    startActivity(i);
}

或者最好将代码放在 onCreate() 方法中

bt_SignIn = (Button) findViewById(R.id.bt_SignIn);
bt_SignIn.setOnClickListener(new View.OnClickListener() {
@Override
    public void onClick(View view) {
        Intent i = new Intent(getApplicationContext(), Frontpage.class);
        startActivity(i);
    }
}

并从布局中删除 onClick

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Go!"
    android:id="@+id/bt_SignIn"
    android:layout_below="@+id/pass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="70dp" />