我的简单计算器应用程序出了问题:
当我有这样的方法时
public void WypiszWartoscPrzycisku(View sender)
它工作正常,一切都很好,但是当我添加浮动时,我的意思是:
public void WypiszWartoscPrzycisku(View sender, float num1)
它崩溃了。我不确定我应该多给什么,因为我没有对num1
做任何事情而app仍然崩溃。
XML(对不起,我不是母语,所以我用我的语言命名的很多东西)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button_AC"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/AC"
android:onClick="WypiszWartoscPrzycisku"/>
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="@string/wynik"
android:inputType="number" >
<requestFocus />
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/button_Siedem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/siedem"
android:onClick="WypiszWartoscPrzycisku"/>
<Button
android:id="@+id/button_Osiem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/osiem"
android:onClick="WypiszWartoscPrzycisku" />
<Button
android:id="@+id/button_Dziewiec"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/dziewiec"
android:onClick="WypiszWartoscPrzycisku" />
<Button
android:id="@+id/button_Plus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/plus"
android:onClick="WypiszWartoscPrzycisku"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/button_Cztery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cztery"
android:onClick="WypiszWartoscPrzycisku"/>
<Button
android:id="@+id/button_Piec"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/piec"
android:onClick="WypiszWartoscPrzycisku"/>
<Button
android:id="@+id/button_Szesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/szesc"
android:onClick="WypiszWartoscPrzycisku" />
<Button
android:id="@+id/button_Minus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/minus"
android:onClick="WypiszWartoscPrzycisku" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/button_Jeden"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/jeden"
android:onClick="WypiszWartoscPrzycisku"/>
<Button
android:id="@+id/button_Dwa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/dwa"
android:onClick="WypiszWartoscPrzycisku"/>
<Button
android:id="@+id/button_Trzy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/trzy"
android:onClick="WypiszWartoscPrzycisku" />
<Button
android:id="@+id/button_Mnozenie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/mnozenie"
android:onClick="WypiszWartoscPrzycisku" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/button_Zero"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/zero"
android:onClick="WypiszWartoscPrzycisku"/>
<Button
android:id="@+id/button_Kropka"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/kropka" />
<Button
android:id="@+id/buttonRownasie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/rownasie"
android:onClick="WypiszWartoscPrzycisku"/>
<Button
android:id="@+id/button_dzielenie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/dzielenie"
android:onClick="WypiszWartoscPrzycisku" />
</LinearLayout>
</LinearLayout>
编辑:
谢谢@beworker和@Raghunandan的答案。我知道了。我虽然添加参数do方法将解决我的主要问题。我的代码是(改为英文名字) switch(bt.getId()){
case R.id.button_AC:
display.setText("");
break;
case R.id.button_Plus:
float num1 = Float.parseFloat(actualText.toString());
display.setText("");
break;
case R.id.buttonEquals:
float num2 = Float.parseFloat(actualText.toString());
float num3 = num1+num2;
String result = Float.toString(num3);
display.setText(wynik);
它说,在最后case R.id.Equals
,num1
未被宣布。
感谢:)
答案 0 :(得分:1)
在布局xml中看起来你有一个带有以下属性的按钮
android:onClick="WypiszWartoscPrzycisku"
所以你需要
public void WypiszWartoscPrzycisku(View sender) // method signature should be like this
{
}
android:onClick
单击视图时要调用的此View上下文中的方法的名称。此名称必须对应于只接受View类型的一个参数的公共方法。例如,如果指定android:onClick =“sayHello”,则必须声明上下文的公共void sayHello(View v)方法(通常是您的Activity)。
http://developer.android.com/reference/android/view/View.html#attr_android:onClick
如果你有这个
public void WypiszWartoscPrzycisku(View sender, float num1)
您的活动没有WypiszWartoscPrzycisku(View sender)
这是必须的,因为您有android:onClick="WypiszWartoscPrzycisku"
,当您点击按钮时,您获得异常无法在活动中找到方法WypiszWartoscPrzycisku(View)
。
编辑:
case R.id.button_Plus:
float num1 = Float.parseFloat(actualText.toString()); // declared and initialized here
display.setText("");
break;
但你在这里使用它
case R.id.buttonEquals:
float num2 = Float.parseFloat(actualText.toString());
float num3 = num1+num2;
您需要将num1
声明为类成员
编辑2:
case R.id.buttonEquals:
// check if you have a button with id R.id.buttonEquals
答案 1 :(得分:0)
您应始终仅使用第一种方法。这是Android将寻找的方法。您可以将它与每个Button一起使用,但是您需要检查发送者ID以执行适当的操作。这是一个例子。
public void WypiszWartoscPrzycisku(View sender) {
if (sender.getId() == R.id.button_Cztery) {
// execute code for button_Cztery
} else if (sender.getId() == R.id.button_Dziewiec) {
// execute code for button_Dziewiec
} else if (sender.getId() == R.id.button_Plus) {
// execute code for button_Plus
}
}