OnClick Listener中无法识别按钮变量

时间:2015-09-08 06:41:30

标签: java android xml

我对Android很新,这是我决定开展的第一个项目。虽然我已经在MainActivity.java文件中声明了我的按钮(addButton,subtractButton等),并将它们分配给XML文件中的各自按钮,但我在运行应用程序时仍然收到错误。我相信这是因为,在OnClick方法中,正在识别XML文件中视图元素的ID。例如,我的“+”按钮的ID是XML中的add_button,但是当我尝试编写时 case R.id.addButton,我收到错误(但case R.id.add_button没有返回错误。)

import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends Activity implements View.OnClickListener {

    Button addButton;
    Button subtractButton;
    Button multiplyButton;
    Button divideButton;
    TextView editText;
    EditText number1;
    EditText number2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        addButton=(Button)findViewById(R.id.add_button);
        multiplyButton=(Button)findViewById(R.id.multiply_button);
        subtractButton=(Button)findViewById(R.id.subtract_button);
        divideButton=(Button)findViewById(R.id.divide_button);

        editText=(TextView)findViewById(R.id.dispNum);
        number1=(EditText)findViewById(R.id.num1);
        number2=(EditText)findViewById(R.id.num2);


        addButton.setOnClickListener(this);
        multiplyButton.setOnClickListener(this);
        subtractButton.setOnClickListener(this);
        divideButton.setOnClickListener(this);
    }

    public void onClick(View v){

        int num1=0,num2=0,result=0;

        num1=Integer.parseInt(number1.getText().toString());
        num2=Integer.parseInt(number2.getText().toString());

        switch(v.getId()){
            case R.id.addButton:
                result=num1+num2;
                break;
            case R.id.subtract_button:
                result=num1-num2;
                break;
            case R.id.multiply_button:
                result=num1*num2;
                break;
            case R.id.divide_button:
                result=num1/num2;
                break;
            default:
                break;
        }

        editText.setText(result);
    }
}

这是XML文件     

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

<EditText
    android:layout_weight="1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/num1"
    android:gravity="center"
    android:id="@+id/num1"/>
<EditText
    android:layout_weight="1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/num2"
    android:gravity="center"
    android:id="@+id/num2"/>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="20dp">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="+"
        android:id="@+id/add_button"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="-"
        android:id="@+id/subtract_button"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="*"
        android:id="@+id/multiply_button"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="/"
        android:id="@+id/divide_button"/>
</LinearLayout>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="30dp"
    android:gravity="center"
    android:textSize="24dp"
    android:id="@+id/dispNum"/>

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

在onClick中

你需要提供你在xml中定义的id add_button而不是你在MainActivity中定义的按钮变量Addbutton 这不是任何问题,这就是android onClick的工作方式。

答案 1 :(得分:0)

我认为问题是错误的,你正在进入一个转换案例

仔细观察,在你的xml中,添加按钮的id是&#34; add_button&#34;你正在使用的情况是

case R.id.addButton:

所以这不是添加按钮的正确和实际ID。请再检查一下你没有弄乱ids。

答案 2 :(得分:0)

检查你的onclick方法,你在开关盒中使用了错误的id。 使用R.id.add_button代替R.id.addButton