Bill Splitter计算器Android应用程序

时间:2011-06-19 04:43:54

标签: android onclick widget

我正在尝试创建一个Android应用,以帮助计算拆分账单,如果让我们说你在2人或更多人的聚会中外出就餐。

您应该输入账单小计,输入参加方的人数,输入适用的折扣(如果有的话),有7个税率的2个复选框,如果没有则有10%的服务费用包括在法案中。最后,您只需点击应用程序的“计算按钮”即可计算每个人必须支付的费用。

我的问题是:

  1. 对于小计,它应该是double而不是int,但我不确定如何将String解析为double。有没有办法做到这一点?
  2. 我不确定这是否是激活税收和10%提示的复选框的最佳方式
  3. 当我点击计算按钮时,它应该显示包含计算结果的Toast消息,但不显示任何内容。我不确定问题是parseInteger,checkBoxes,还是onClick方法是错误的,还是全部错误。
  4. 这是我写的代码:

        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>
    

    感谢您的帮助。真的很感激。

2 个答案:

答案 0 :(得分:0)

  

对于小计,它应该是double而不是int,但我不确定如何将String解析为double。有没有办法做到这一点?

Yes there is.

  

我不确定这是否是启动税收和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

        }
    });