我正在尝试创建一个Android应用,以帮助计算拆分账单,如果让我们说你在2人或更多人的聚会中外出就餐。
您应该输入账单小计,输入参加方的人数,输入适用的折扣(如果有的话),有7个税率的2个复选框,如果没有则有10%的服务费用包括在法案中。最后,您只需点击应用程序的“计算按钮”即可计算每个人必须支付的费用。
我的问题是:
这是我写的代码:
package com.kevinw.BillSplitter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class BillSplitter extends Activity implements OnClickListener {
/** Declares XML Widgets */
private EditText numberDiners;
private EditText enterAmount;
private EditText enterDiscount;
private CheckBox gst;
private CheckBox tips;
private CheckBox cess;
double result;
private Button calculate;
private TextView resultAmount;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Initialize Widgets
numberDiners = (EditText) findViewById(R.id.numberDiners);
enterAmount = (EditText) findViewById(R.id.EnterAmount);
enterDiscount = (EditText) findViewById(R.id.EnterDiscount);
calculate = (Button) findViewById(R.id.calculate);
//Initialize CheckBoxes
gst = (CheckBox) findViewById(R.id.cbCheck1);
gst.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (gst.isChecked()) {
result = result + (0.07 * result);
}
else {
result = result;
}
}
});
tips = (CheckBox) findViewById(R.id.cbCheck2);
tips.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (tips.isChecked()) {
result = result + (0.1 * result);
}
else {
result = result;
}
}
});
}
@Override
public void onClick(View v) {
//Initialize EditTexts
String amount = enterAmount.getText().toString();
int subtotal = Integer.parseInt(amount);
String diners = numberDiners.getText().toString();
int people = Integer.parseInt(diners);
String disc = enterDiscount.getText().toString();
int discount = Integer.parseInt(disc);
double discounted = discount / 100;
result = (1 - discounted) * (subtotal / people);
switch (v.getId()) {
case(R.id.calculate):
Toast.makeText(this, "The Amount a Person has to pay: $" + result, Toast.LENGTH_LONG).show();
break;
}
}
}
如果有帮助,这是布局的XML代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/dinersView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"/>
<TextView
android:id="@+id/Enter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/dinersView"
android:layout_alignLeft="@+id/EnterAmount"
android:text="@string/enter"/>
<EditText
android:id="@+id/numberDiners"
android:layout_height="wrap_content"
android:layout_below="@+id/dinersView"
android:layout_width="100dip"/>
<EditText
android:id="@+id/EnterAmount"
android:layout_height="wrap_content"
android:layout_below="@+id/Enter"
android:layout_toRightOf="@+id/numberDiners"
android:layout_width="220dip"/>
<TextView
android:id="@+id/Discount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/EnterAmount"
android:layout_alignLeft="@+id/EnterAmount"
android:text="@string/discount"/>
<EditText
android:id="@+id/EnterDiscount"
android:layout_height="wrap_content"
android:layout_below="@+id/Discount"
android:layout_alignLeft="@+id/Discount"
android:layout_width="220dip"/>
<CheckBox
android:id="@+id/cbCheck1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/EnterDiscount" />
<CheckBox
android:id="@+id/cbCheck2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cbCheck1" />
<TextView
android:id="@+id/gst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/cbCheck1"
android:layout_alignTop="@+id/cbCheck1"
android:layout_alignLeft="@+id/enterDiscount"
android:layout_marginTop="10dip"
android:text="@string/GST"/>
<TextView
android:id="@+id/tips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/cbCheck2"
android:layout_alignTop="@+id/cbCheck2"
android:layout_marginTop="10dip"
android:text="@string/tips"/>
<Button
android:id="@+id/calculate"
android:layout_below="@+id/cbCheck2"
android:layout_width="wrap_content"
android:text="@string/calculate"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"/>
</RelativeLayout>
感谢您的帮助。真的很感激。
答案 0 :(得分:0)
对于小计,它应该是double而不是int,但我不确定如何将String解析为double。有没有办法做到这一点?
我不确定这是否是启动税收和10%提示的复选框的最佳方式
这不是一个问题,但继续,不,这不是编写复选框代码的正确方法。
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (gst.isChecked()) {
result = result + (0.07 * result);
} else {
result = result;
}
}
此代码无法按预期运行。价格将在复选框的每个秒刻度上继续上涨。您可能想要逐步了解头脑或纸上实际发生的事情,然后尝试重新考虑它。
当我点击计算按钮时,它应该显示带有计算结果的Toast消息,但不显示任何内容。我不确定问题是parseInteger,checkBoxes,还是onClick方法是错误的,还是全部错误。
我认为你会发现永远不会调用onClick函数,因为你没有调用setOnClickListener函数。我想这可能是问题,但我不确定。
答案 1 :(得分:0)
对于字符串到双精度转换,您可以使用Double.valueOf(“”)。
你需要将clicklistener添加到你的计算器按钮,添加calculate.setOnClickListener(this);
或在此块中移动您的onClick代码而不使用switch case。
calculate.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
}
});