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

时间:2016-02-12 23:46:29

标签: java android android-activity android-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"/>

这可能是一个小修复,但即使我无法发现这个错误

编辑:很抱歉,但为什么我的问题是&#34;被拒绝投票&#34;?这是一个真正的问题,对于刚接触Android开发的人来说很容易让人感到困惑或难以理解......

4 个答案:

答案 0 :(得分:2)

<强>解决方案

删除行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!");
        }
    });
}

现在只需从您活动的initializeButtons()方法中调用onCreate即可。

答案 1 :(得分:1)

问题是你要设置两次onClick动作。在您的xml代码中,您只需将onClick()设置为按钮,就不需要在subdir = os.path.replace(root, '') # I'm not too sure what is a better way to replace paths.. 中设置setOnClickListener()。您有两种选择:

保持xml文件不变,并在signUpButtonClickAction(View v)内执行:

signUpButtonClickAction(View v)

删除xml文件的onClick:

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

在您的活动中执行此操作:

<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"
/>

答案 2 :(得分:0)

问题的原因是:onclick()onClickListener字面意思相同!你正在实现这两个,最终结果是你需要按两次按钮才能启动活动!

<强> FIX:

您的问题的解决方案是:

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

答案 3 :(得分:0)

正如mcwise所说     安卓的onClick = “signUpButtonClickAction” 和     signUpButtonClick.setOnClickListener(new View.OnClickListener(){         @覆盖         public void onClick(查看v){             startActivity(new Intent(MainActivity.this,Signup.class));         }         }); 做同样的事情。所以你必须选择其中一个。让这两个导致问题