三个按钮OnClickListener Android应用程序

时间:2014-10-28 18:00:32

标签: java android button onclicklistener

我一直在尝试构建一个数学闪存卡应用程序,用户输入两个数字,然后选择一个按钮,具体取决于它是否需要数字加,减或乘。

图像:http://i.stack.imgur.com/83FdN.png

问题似乎是OnClickListener。我用一个按钮创建了其他项目,它们工作得很好,但有两个按钮,我不知道该怎么做。

我试过了:

我已经取出按钮代码并运行它然后它可以工作。我不知道还能做什么。

这是我尝试使用一个按钮尝试的最后一个代码,app仍然强行关闭。

public class MainActivity extends ActionBarActivity implements OnClickListener{

int num1, num2, total;

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

    final EditText txtInt1 = (EditText)findViewById(R.id.txtInt1);
    final EditText txtInt2 = (EditText)findViewById(R.id.txtInt2);
    final TextView result = (TextView) findViewById(R.id.txtResult);

    num1 = Integer.parseInt(txtInt1.getText().toString());
    num2 = Integer.parseInt(txtInt2.getText().toString());

    final Button btnAddition = (Button) findViewById(R.id.btnAddition);
    Button btnSubstraction = (Button) findViewById(R.id.btnSubstraction);
    Button btnMultiplication = (Button) findViewById(R.id.btnMultiplication);
    /*
    btnSubstraction.setOnClickListener(this);      
    btnAddition.setOnClickListener(this); 
    btnMultiplication.setOnClickListener(this); */

    btnAddition.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (v == btnAddition){

                if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20 ){
                    Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20", 
                            Toast.LENGTH_SHORT).show();
                }
                else {
                    total = num1+num2;
                    result.setText(num1+" + "+num2+" = "+total);
                } 
            }

        }
    });

谢谢!

5 个答案:

答案 0 :(得分:1)

最好将它们移动到单个OnClick代码块。 检查v.getId()是否为按钮ID。 尝试将代码更改为

btnSubstraction.setOnClickListener(this);      
btnAddition.setOnClickListener(this); 
btnMultiplication.setOnClickListener(this);
}

 @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btnAddition){

            if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20 ){
                Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20", 
                        Toast.LENGTH_SHORT).show();
            }
            else {
                total = num1+num2;
                result.setText(num1+" + "+num2+" = "+total);
            } 
        }


    }
});

答案 1 :(得分:1)

由于您正在实现OnClickListener,因此需要在onClick上使用覆盖方法(View arg)。通过使用开关,您可以为希望单击操作的每个按钮设置单独的案例。以下是步骤

1)实例化按钮小部件后:将onClickListener设置为每个按钮小部件

btnSubstraction.setOnClickListener(this);      
btnAddition.setOnClickListener(this); 
btnMultiplication.setOnClickListener(this);

2)在onClick()方法中创建案例:确保它不在你的onCreate()

@Override
public void onClick(View v) {
   switch (v.getId()) {
   case R.id.btnAddition:
      // do some action for addition
      break;
   case R.id.btnSubstraction:
      // do some action for substraction
      break;
   case R.id.btnMultiplication:
      // do some action for multiplication
      break;
   default:
      break;
   }
}

3)确保实现OnClickListener

有关按钮的精彩教程,请查看http://ljtatum.blog.com/buttons/。您可以下载免费的示例代码。但我上面发布的内容对你有用。干杯!

答案 2 :(得分:0)

您是否尝试过设置日志?你可以这样做:     Log.e(&#34; TAG&#34;&#34; MSG&#34);

然后您可以观看LogCat并查找错误! ;)

我会实现其他按钮,就像你使用匿名内部类的第一个按钮一样。

btnSubstraction.setOnClickListener(new OnCLickListener() {
    @Override
    public void onClick(View v){
        Your Code goes here or u trigger another Method for readability for example:
        Substraction();

        ...

你应该密切注意按钮的ID:     R.findViewById ...

但如果你触发按钮对象上的onClick,你甚至不需要这个。 ;) 是的,我想是的,尝试离开:

if(v==btnAddition)

系统已经通过触发按钮对象onClick来了解这一点。

所以你的代码应该是这样的:

btnAddition.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20 ){
                Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20", 
                        Toast.LENGTH_SHORT).show();
            }
            else {
                total = num1+num2;
                result.setText(num1+" + "+num2+" = "+total);
            } 
        }
    }
});

btnSubstraction.setOnClickListener(new OnCLickListener() {
        @Override
        public void onClick(View v){
        //Substractioncode here
        }
});

答案 3 :(得分:0)

DaveS。说的是你可能在这两行onCreate()中得到例外

num1 = Integer.parseInt(txtInt1.getText().toString());
num2 = Integer.parseInt(txtInt2.getText().toString());

这些应移至onClick(),因为在onCreate()中他们尚未获得值,因此您将获得NumberFormatException。您还应该进行一些错误检查,例如

try {
    num1 = Integer.parseInt(txtInt1.getText().toString());
    num2 = Integer.parseInt(txtInt2.getText().toString());
} catch (NumberFormatException e) {
     // log the error and possibly print a message to the user
}

当您的应用崩溃时,您应该始终发布您的堆栈跟踪,以便我们可以轻松找到答案。您发布的代码的问题不在于您设置OnClickListener的方式,而是您所指示的。

This SO answer显示如何为OnClickListener设置Buttons。一切都会正常工作,所以你决定哪种方式最适合你。

答案 4 :(得分:0)

您正在尝试getText并在string的{​​{1}}中转换int。在onCreate()中,当您尝试转换它时,您将获得onCreate() 空白字符串,您将获得""。解决方案是在按钮NumberFormatException方法中移动这两个。

onClick