繁体   English   中英

必须单击一个按钮两次才能在 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));
    }
});

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM