我正在开发一个管理日常开支的应用程序。我需要添加一个功能,即用户可以计算一个类别下更多费用的总和。 [只是当用户想要增加费用时,(比如食物)他需要计算食物的所有费用并添加食物类别的总金额。
要做到这一点,我使用一个按钮。当用户点击该按钮时,弹出一个小计算器。(使用对话框)。
我的问题是,我想在对话框内的按钮上使用常见的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);
}
两种方式都是正确的..
答案 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
}