7

在开发我的第一个 Android 计算器应用程序时,我通过意图传递答案成功地更新了新活动中的 TextView,但这需要用户点击返回以执行另一次计算。我正在尝试使 doCalculation 按钮更新 MainActivity 中的简单 TextView 并收到错误消息:

06-22 11:08:17.318: E/AndroidRuntime(31328): 由: java.lang.ClassCastException: android.widget.Button 无法转换为 android.widget.EditText

这是我的代码:

/** Called when the user clicks the Calculate! button */
public void doCalculation(View view) {
    // Do something in response to button
    int answerInt;
    String answer;
    EditText numberOne = (EditText) findViewById(R.id.number1);
    EditText numberTwo = (EditText) findViewById(R.id.number2);
    int numberOnee = Integer.parseInt(numberOne.getText().toString());
    int numberTwoo = Integer.parseInt(numberTwo.getText().toString());
    answerInt = numberOnee * numberTwoo;
    answer = Integer.toString(answerInt);

    TextView homeAnswerView = (TextView) findViewById(R.id.homeAnswerView);
    homeAnswerView.setTextSize(40);
    homeAnswerView.setText(answer);
}

作为参考,以下是成功启动新活动的代码:

// Called when the user clicks the Calculate! button
public void doCalculation(View view) {
    // Do something in response to button
    int answerInt;
    String answer;
    Intent intent = new Intent(this, DisplayCalculationActivity.class);
    EditText numberOne = (EditText) findViewById(R.id.number1);
    EditText numberTwo = (EditText) findViewById(R.id.number2);
    int numberOnee = Integer.parseInt(numberOne.getText().toString());
    int numberTwoo = Integer.parseInt(numberTwo.getText().toString());
    answerInt = numberOnee * numberTwoo;
    answer = Integer.toString(answerInt);
    intent.putExtra(EXTRA_MESSAGE, answer);
    startActivity(intent);
}

更新,XML 供参考:

<EditText
    android:id="@+id/number2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView3"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="16dp"
    android:ems="10"
    android:inputType="number" />

<EditText
    android:id="@+id/number1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:ems="10"
    android:inputType="number"
    android:singleLine="true" />

<Button
    android:id="@+id/calculateBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/number2"
    android:layout_alignRight="@+id/number2"
    android:layout_below="@+id/number2"
    android:layout_marginTop="14dp"
    android:onClick="doCalculation"
    android:text="Calculate!" />

谢谢你的帮助,-迈克尔

4

4 回答 4

12

似乎 R.id.number1 或 R.id.number2 是一个按钮。检查您的 XML 并确保它是 EditText。

编辑:原始答案无效,但清理项目解决了问题。

于 2013-06-22T02:19:58.030 回答
0

我刚遇到这个问题。xml布局文件似乎没有正确编译。或者更确切地说,它不包含在要编译的更改文件列表中。

于 2013-07-31T11:37:53.300 回答
0

我遇到了同样的情况,但我发现在不同的活动中有两个具有相同 ID 的文本视图,所以我更改了其中一个,程序运行清晰,所以检查所有编辑文本和按钮的 ID,并更改 samilier,即使它们是在其他活动中,我认为它会运行没有任何问题

于 2015-05-30T20:30:08.763 回答
0

我按照答案中的步骤(清理然后确保它是 id)并注意到去我的源头EditText R.id把我带到EditText. 认为这绝对不是IDE缓存问题。

我所做的是更改 LinearLayout

android:layout_width="fill_parent" 
android:layout_height="fill_parent"

android:layout_width="match_parent"
android:layout_height="match_parent"

出于某种原因,它解决了这个问题(我将整个布局包裹在我最近删除的其他东西中)。

于 2016-05-14T13:35:56.857 回答