必须单击按钮两次才能在 Android Studio 中使用

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));
    }
});

到 activity 的 onCreate 方法或片段的 onCreateView 方法。

备选方案

或者,将代码更改为此

public void signUpButtonClickAction(View v) { 
    startActivity(new Intent(MainActivity.this, Signup.class));
}

说明

xml 中的行 android:onClick="signUpButtonClickAction" 导致对 signUpButtonClick.setOnClickListener() 的内部调用,因此您不必在 [=17= 中设置 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!");
        }
    });
}

现在只需从 activity 的 onCreate 方法中调用 initializeButtons()

问题是您设置了两次 onClick 操作。在您的 xml 代码中,您刚刚为按钮分配了一个 onClick(),您不需要在 signUpButtonClickAction(View v) 中设置 setOnClickListener()。您有两个选择:

保留 xml 文件原样并在 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"
/>

并在您的 Activity 中执行此操作:

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字面上是一样的!而你同时实现了这两者,最终结果是你需要按两次按钮才能启动 Activity!

  • See this question for more info

修复:

您的问题的解决方案是:

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));
    }
});

正如麦克怀斯所说 android:onClick="signUpButtonClickAction" 和 signUpButtonClick.setOnClickListener(新View.OnClickListener() { @覆盖 public void onClick(View v) { startActivity(新意图(MainActivity.this, Signup.class)); } }); 做同样的事情。所以你必须和他们中的一个一起去。有这两个是导致问题的原因

可能关注的对象: 我遇到了同样的问题,但上面的 none 解决方案解决了它。 出于某种原因我无法理解,我的按钮中有这行代码:

android:textIsSelectable="true"

从按钮中删除该属性使其生效。

这显然使得第一次点击select文本,第二次点击触发了onClick按钮。