对话框中常见的onclicklistener

时间:2014-06-27 05:49:48

标签: java android dialog onclicklistener

我正在开发一个管理日常开支的应用程序。我需要添加一个功能,即用户可以计算一个类别下更多费用的总和。 [只是当用户想要增加费用时,(比如食物)他需要计算食物的所有费用并添加食物类别的总金额。

要做到这一点,我使用一个按钮。当用户点击该按钮时,弹出一个小计算器。(使用对话框)。enter image description here

我的问题是,我想在对话框内的按钮上使用常见的Onclicklistner。我可以这样做吗?

这是我正在使用的代码

protected void popUpCalculator(){
    final Dialog dialog_cal = new Dialog(NewExpence.this);
    dialog_cal.setTitle("Calculator");
    dialog_cal.setContentView(R.layout.calculater);

    initialiseButtons(dialog_cal);

    dialog_cal.show();
}

    public void initialiseButtons(Dialog d){
    num0 = (Button) d.findViewById(R.id.btn0);

    num1 = (Button) d.findViewById(R.id.btn1);
    num2 = (Button) d.findViewById(R.id.btn2);
    num3 = (Button) d.findViewById(R.id.btn3);
    num4 = (Button) d.findViewById(R.id.btn4);
    num5 = (Button) d.findViewById(R.id.btn5);
    num6 = (Button) d.findViewById(R.id.btn6);
    num7 = (Button) d.findViewById(R.id.btn7);
    num8 = (Button) d.findViewById(R.id.btn8);
    num9 = (Button) d.findViewById(R.id.btn9);
    numC = (Button) d.findViewById(R.id.btnC);
    dot = (Button) d.findViewById(R.id.btnDot);
    opDiv = (Button) d.findViewById(R.id.btnDiv);
    opMul = (Button) d.findViewById(R.id.btnMulti);
    opMinus = (Button) d.findViewById(R.id.btnMinus);
    opPlus = (Button) d.findViewById(R.id.BtnAdd);
    CalculatorValue = (TextView) d.findViewById(R.id.Value);

}

@Override
public void onClick(View v) {
     if(v.getId()==R.id.calButton){
        popUpCalculator();
    }
   }

我对计算器的逻辑是这样的。它应该是放在onclickListner

内的代码段
String buttonPressed = ((Button) v).getText().toString();
             if(DIGITS.contains(buttonPressed)){
                if(userIsInTheMiddleOfTypingANumber){
                    if (buttonPressed.equals(".") && CalculatorValue.getText().toString().contains(".")) {
                        // ERROR PREVENTION
                        // Eliminate entering multiple decimals
                    } else {
                        CalculatorValue.append(buttonPressed);
                    }
                }else{
                     if (buttonPressed.equals(".")) {
                            // ERROR PREVENTION
                            // This will avoid error if only the decimal is hit before an operator, by placing a leading zero
                            // before the decimal
                         CalculatorValue.setText(0 + buttonPressed);
                        } else {
                            CalculatorValue.setText(buttonPressed);
                        }
                    userIsInTheMiddleOfTypingANumber=true;
                }
             }
        }

修改

接受的答案是最好的方法

但我已经这样做了..

Button [] buttonIds = {num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,numC,dot,opDiv,opMinus,opMul,opPlus};


    for(int x=0;x<buttonIds.length;x++){
        ((Button)buttonIds[x]).setOnClickListener(this);
    }

两种方式都是正确的..

1 个答案:

答案 0 :(得分:2)

您是否在按钮上注册了onClickListener

您也可以这样做

protected void popUpCalculator(){
   final Dialog dialog_cal = new Dialog(NewExpence.this);
   dialog_cal.setTitle("Calculator");
   dialog_cal.setContentView(R.layout.calculater);

   int buttonIds[] = { R.id.btn0 , R.id.btn1, R.id.btn2, R.id.btn3,
                       R.id.btn4 , R.id.btn5, R.id.btn6, R.id.btn6,
                       R.id.btn7 , R.id.btn8, R.id.btn9, R.id.btnC,
                       R.id.btnDot , R.id.btnDiv, R.id.btnMulti, 
                       R.id.btnMinus , R.id.BtnAdd , R.id.Value }

   for(int i=0; i<buttonIds.length; i++){
        dialog_cal.findViewById(buttonIds[i]).setOnClickListener(this);
       // use this if you are implementing View.OnClickListener
   }

   dialog_cal.show();
}

@Override
public void onClick(View v) {
   if(v.getId() == R.id.calButton){
      popUpCalculator();
   }
   // for other buttons chech their ids and write the respective code
}