2016-02-12 133 views
0

因此,我正在创建一个应用程序,并且一直困扰着我的一件小事情是,我必须单击按钮两次才能使其工作。必须单击按钮两次才能在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"/> 

这可能是一个小的修复,但即使我能” t发现此错误

编辑:对不起,但为什么我的问题是“倒票”?这是一个真正的问题,很容易被混淆或难以理解的人谁是新的Android开发...

回答

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方法。

+0

嗨,你为什么删除'onClickListener'?我认为它可行,但现在我很困惑,为什么没有听众:/ –

+0

你在做什么是在第一次点击按钮时设置一个新的onClickListener。如果您在xml中使用'android:onClick =“signUpButtonClickAction”',则Android已将onClickListener内部设置为您指定的方法 - signUpButtonClickAction。 – marktani

+0

@SamuelGeorgeszusz一个监听器由框架设置,并调用你在'android:onClick'中提到的方法。 –

1

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

离开xml文件就像是和里面signUpButtonClickAction(View v)做:

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

OR

删除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)); 
    } 
}); 
+0

谢谢你回答我的问题。因为我已经接受了以前的答案,所以我仍然会提高您的答案。出于兴趣,如何编程一个按钮,以便询问用户他们是否还想回去? –

+0

我不确定我是否理解你的问题,无论你想在按下按钮时执行什么操作,都必须在onClick()中写入它。这将取决于你想要做什么,但作为一个例子,你可以创建一个可见性为'View.GONE'的LinearLayout,当你点击按钮时,你将LinearLayout的可见性改为'View.VISIBLE '包含两个按钮,一个用于返回,另一个用于移动到下一个活动, – Spirrow

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

作为mcwise所述 机器人:的onClick = “signUpButtonClickAction” 和 signUpButtonClick.setOnClickListener(新View.OnClickListener(){ @Override 公共无效的onClick(视图v){ startActivity(new Intent(MainActivity.this,Signup.class)); } }); 做同样的事情。所以你必须去与其中一个。有两个是造成问题

相关问题