iT邦幫忙

0

我是Android新手....我正在做一個飲料店的APP,但總額不知道怎麼串起來...[Android studio]

  • 分享至 

  • xImage

我現在能明確依照小杯大杯跟數量來影響總價,但現在我要做加料的部分就不太了解了...怎麼三個串在一起

 private Button.OnClickListener money = new
    OnClickListener() {
    @Override
    public void onClick(View v) {
    switch (v.getId()) {
        case R.id.medium: {
            total_price.setText( "45" );
                    counter = Integer.parseInt( total_price.getText().toString() 
                    );
break;
        }
             case R.id.large: {
        total_price.setText( "80" );
        counter = Integer.parseInt( total_price.getText().toString() );
        break;
        }
            case R.id.bottled: {
            total_price.setText( "" );
            break;
            }
            }
        less = (ImageButton) findViewById( R.id.less );
        plus = (ImageButton) findViewById( R.id.plus );

        less.setOnClickListener( AddandLess );
        plus.setOnClickListener( AddandLess );

            }
        };


    private Button.OnClickListener AddandLess = new
    OnClickListener() {
    @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.less: {
if (count > 0) {
count--;
textView.setText( "" + count );
}
break;
}
case R.id.plus: {
if (count < max) {
count++;
textView.setText( "" + count );
}
break;
}
}
}
};
{


Perilla.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + Perilla1;
total_price.setText( counter );
}
}
} );


jelly.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + jelly1;
total_price.setText( counter );
}
}
} );

aloe.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + aloe1;
total_price.setText( counter );
}
}
} );

redbeans.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + redbeans1;
total_price.setText( counter );
}
 }
} );

pearl.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + pearl1;
total_price.setText( counter );

}
}
} );

Coconut.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + Cocount1;
total_price.setText( counter );
}
}
} );

jade.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + jade1;
total_price.setText( counter );
}
}
} );

pudding.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
if (c) {
counter = counter + pudding1;
total_price.setText( counter );
}
}
} );
int TotalPrice = counter * count;
String strTotalPrice = String.valueOf( TotalPrice );
total_price.setText( strTotalPrice );   }

};

;
我更新了我目前的程式碼,但跟我想的不一樣...我以為加料的每個程式碼將原有的size+加料的金額再把它放進總金額total_price的textview顯示 會顯示45+10=55 但他不變,一樣是45....
我將每個加料在前面有宣告int pearl1=10這種

player iT邦大師 1 級 ‧ 2019-07-30 17:52:27 檢舉
基於安全性, 與金額相關的數值統計, 千萬別信任從用戶端傳回來的數值, 最好是都在資料庫裡用SQL計算
echochio iT邦高手 1 級 ‧ 2019-07-31 09:18:42 檢舉
用個簡單的SQLite 吧 ......
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
dragonH
iT邦超人 5 級 ‧ 2019-07-30 16:19:33

因為你是用文字直接相加

那樣等同於把文字串起來

要拿到正確的結果

請用數字相加

看更多先前的回應...收起先前的回應...

我現在遇到一個問題是 我在上面有宣告strTotalPrice但在下面的加料怎麼會出現(無法解析)是要在宣告一次嗎...怎麼做呢

dragonH iT邦超人 5 級 ‧ 2019-07-30 16:52:24 檢舉

你貼的不是完整的 code

所以我也不知道你宣告的位置對不對

"< 我只知道我現在貼的那段
int TotalPrice = counter * count;
String strTotalPrice = String.valueOf( TotalPrice );
total_price.setText( strTotalPrice );
只能夠做大杯小杯的數量乘除而已
本來我想說把加料、大杯小杯、數量統整完下面再用這個code在表示
但貼在最下面又說無法解析= = 我學不久><

sion iT邦新手 4 級 ‧ 2019-07-30 17:00:44 檢舉

strTotalPrice 就命名來看是string型別吧....

sion iT邦新手 4 級 ‧ 2019-07-30 17:03:22 檢舉

你是string + 10 所以 會連在後面阿
要用 TotalPrice + 10 數字+數字

Homura iT邦高手 1 級 ‧ 2019-07-30 17:08:15 檢舉

這是程式基礎沒有學會才會有這種問題.....

dragonH iT邦超人 5 級 ‧ 2019-07-30 17:20:20 檢舉

我好奇的是原本都是

strTotalPrice + 10

怎麼到後面變

strTotalPrice + "10"

了XD

== 因為我在試兩個有沒有差

我現在是看書自學....好難懂阿....QQ

dragonH iT邦超人 5 級 ‧ 2019-07-30 17:30:22 檢舉

沒這麼困難啦XD

以後你學到要連資料庫, 發 http request

搞不好頭會更痛

要解決 4510 的問題

就是去用數字做運算

要解決無法解析的問題

應該就是在正確的地方宣告

其實我不是很懂無法解析是什麼 error/images/emoticon/emoticon07.gif

我記得 log 不都是英文的嗎

pearl.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c)
{
if (c)
{
counter=counter+pearl1;
total_price.setText(counter);}
}
} );
現在我知道怎數字相加了,我有在前面程式碼打上大小杯會用counter來儲存,但我這邊下的第二行照理來說不是會把counter加完10元在顯示在total_price嗎....還是我哪邊理解有錯@@

(我在最前面有創一個int pearl1=10)

dragonH iT邦超人 5 級 ‧ 2019-07-31 10:08:47 檢舉

阿不然是顯示什麼呢/images/emoticon/emoticon26.gif

沒錯誤的話

就把 counter log 出來

然後你這樣寫

如果取消勾選看起來是不會扣掉10元

他沒把加料的價格顯示出來 一樣顯示小杯大杯的而已/images/emoticon/emoticon20.gif

0
小魚
iT邦大師 1 級 ‧ 2019-07-30 17:59:28

編譯器比你還聰明,
他看到 String + int 就會自動轉成兩個 String 相加,
不過也有些程式語言不允許這樣,
一定要你轉型才能相加.

然後...
其實我不知道你的問題是什麼,
也許你也不知道...

就是我現在想達成選擇size、杯數、加料會總和出來
但我現在可以把size跟杯數的總價算出來
但我現在多了一個加料就不太懂了...我再更新我的程式碼

小魚 iT邦大師 1 級 ‧ 2019-07-31 11:43:43 檢舉

在寫程式之前,
你應該要先思考現實生活是怎麼算的,
按照這個步驟去算就是了,
正常來說應該是改變了一個地方就重新計算,
也就是說,
計算的function只有一個,
所有的改變都去呼叫那個function.

0
Zed_Yang
iT邦新手 3 級 ‧ 2019-07-31 09:05:05

依照你的說明來說
我猜想是想做飲料店的手機版本的pos簡易系統

功能應該是選擇飲料 選擇大小 選擇杯數 選擇加料
總金額公式應該是 strTotlePrice = 飲料價格* 杯數 + 加料

int TotalPrice = counter * count;
String strTotalPrice = String.valueOf( TotalPrice );
total_price.setText( strTotalPrice );

我猜想你的總金額應該是 int TotalPrice
counter是飲料價格 count是杯數

switch (v.getId()) {
               case R.id.jelly: {
               total_price.setText( strTotalPrice + 10);
               break;}
               case R.id.aloe: {
               total_price.setText( strTotalPrice + 10);
               break; }
               case R.id.redbeans: {
               total_price.setText( strTotalPrice + 10 );
               break; }
               case R.id.pearl: {
               total_price.setText( strTotalPrice + 10 );
               break;}
               case R.id.jade: {
               total_price.setText( strTotalPrice + "10" );
               break; }
               case R.id.Coconut: {
               total_price.setText( strTotalPrice + "10" );
               break;}
               case R.id.pudding: {
               total_price.setText( strTotalPrice + "10" );
               break; }
               case R.id.Perilla: {
               total_price.setText( strTotalPrice + "10" );
               break;}
                   }  }     

這段我猜想每個case是各種不同的加料 每種都是10元
所以你要加總的金額 應該是TotalPrice + 10
最後要輸出時 再將TotalPrice 轉成string型態

看更多先前的回應...收起先前的回應...

我目前狀況是
pearl.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c)
{
if (c)
{
counter=counter+pearl1;
total_price.setText(counter);}
}
} );

我按了小杯、任何一個加料,都只會顯示小杯價格,加料完全沒反應...

Zed_Yang iT邦新手 3 級 ‧ 2019-07-31 13:31:49 檢舉

ws11017999
我仔細看了一下你的code
建議你重新排個板
很多跨號的地方都擺錯了
還有switch 寫錯

舉個例子

 switch (v.getId()) {
                    case R.id.medium: {
                        total_price.setText("45");
                        counter = Integer.parseInt( total_price.getText().toString() );
                   
                   } break;--break到底是在跨號內還是外?
                    case R.id.large: {
                        total_price.setText("80");
                        counter = Integer.parseInt( total_price.getText().toString() );
                        break;
                    }
                    case R.id.bottled: {
                        total_price.setText( "" );
                        break;
                    }
                }
                less = (ImageButton) findViewById( R.id.less );
                plus = (ImageButton) findViewById( R.id.plus );

                less.setOnClickListener( AddandLess );
                plus.setOnClickListener( AddandLess );

下面關於加料的監聽
也有發現依些跨號的問題
請樓主再檢查試試

我更新了我的程式碼,但我現在執行就直接跳出上一個畫面/images/emoticon/emoticon04.gif

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{hk.csim.dm/hk.csim.dm.Main20Activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference –

這個錯誤訊息是什麼意思.....google翻譯意思說嘗試用虛方法是什麼鬼

Zed_Yang iT邦新手 3 級 ‧ 2019-07-31 16:47:25 檢舉
 private Button.OnClickListener money = new OnClickListener() 
 {
    @Override
    public void onClick(View v) 
	{
		switch (v.getId()) 
		{
			case R.id.medium: 
			{
				total_price.setText( "45" );
				counter = Integer.parseInt( total_price.getText().toString() );
				break;
			}
			case R.id.large: 
			{
				total_price.setText( "80" );
				counter = Integer.parseInt( total_price.getText().toString() );
				break;
			}
			case R.id.bottled: 
			{
				total_price.setText( "" );
				break;
			}
		}
			less = (ImageButton) findViewById( R.id.less );
			plus = (ImageButton) findViewById( R.id.plus );

			less.setOnClickListener( AddandLess );
			plus.setOnClickListener( AddandLess );

    }
};


private Button.OnClickListener AddandLess = new OnClickListener() 
{
    @Override
	public void onClick(View v) 
	{
		switch (v.getId()) 
		{
			case R.id.less: 
			{
				if (count > 0) 
				{
					count--;
					textView.setText( "" + count );
				}
				break;
			}
			case R.id.plus: 
			{
				if (count < max) 
				{
					count++;
					textView.setText( "" + count );
				}
				break;
			}
		}
	}
};

	{ (這裡)


Perilla.setOnCheckedChangeListener( 
new OnCheckedChangeListener() 
{
@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) 
	{
		if (c) 
		{
			counter = counter + Perilla1;
			total_price.setText( counter );
		}
	}
} 
);


jelly.setOnCheckedChangeListener( 
new OnCheckedChangeListener() 
{
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) {
		if (c) 
		{
			counter = counter + jelly1;
			total_price.setText( counter );
		}
	}
} 
);

aloe.setOnCheckedChangeListener( 
new OnCheckedChangeListener() 
{
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) 
	{
		if (c) {
			counter = counter + aloe1;
			total_price.setText( counter );
		}
	}
} 
);

redbeans.setOnCheckedChangeListener( 
new OnCheckedChangeListener() 
{
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) {
		if (c) {
			counter = counter + redbeans1;
			total_price.setText( counter );
		}
	 }
} 
);

pearl.setOnCheckedChangeListener( 
new OnCheckedChangeListener() 
{
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) {
		if (c) 
		{
			counter = counter + pearl1;
			total_price.setText( counter );
		}
	}
} 
);

Coconut.setOnCheckedChangeListener( 
new OnCheckedChangeListener() 
{
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) {
		if (c) 
		{
			counter = counter + Cocount1;
			total_price.setText( counter );
		}
	}
} );

jade.setOnCheckedChangeListener(
new OnCheckedChangeListener() 
{
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) {
		if (c) 
		{
			counter = counter + jade1;
			total_price.setText( counter );
		}
	}
} );

pudding.setOnCheckedChangeListener( 
new OnCheckedChangeListener() 
{
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean c) {
		if (c) 
		{
			counter = counter + pudding1;
			total_price.setText( counter );
		}
	}
} );

int TotalPrice = counter * count;
String strTotalPrice = String.valueOf( TotalPrice );
total_price.setText( strTotalPrice );   }

};   (這裡)

幫你最後更新的code再整理一下
發現多了一個 { 還有一個 };

Zed_Yang iT邦新手 3 級 ‧ 2019-07-31 16:50:21 檢舉

想知道為什麼大小杯 杯數都是用clickListencer
可是加料卻是用 CheckedChangeListencer
是一群checkbox 選項 有不加料 加料1 加料2 這樣嗎?

0
海綿寶寶
iT邦大神 1 級 ‧ 2019-08-01 10:44:05

https://ithelp.ithome.com.tw/upload/images/20190801/20001787fbn4usQJfh.png

package test.com.testapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class PosActivity extends AppCompatActivity {
    private CheckBox chkperilla;
    private CheckBox chkjella;
    private CheckBox chkredbeans;
    private CheckBox chkaloe;
    private CheckBox chkpearl;
    private CheckBox chkcoconut;
    private CheckBox chkjade;
    private CheckBox chkpudding;
    private TextView txtCnt;
    private TextView txtMOA;
    int iUnitPrice = 0; /* 單價 */
    int iAddOn = 0;     /* 加料的單價,每一種加 10 元 */
    int iCount = 0;     /* 杯數 */

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

        chkperilla = findViewById(R.id.chkperilla);
        chkjella = findViewById(R.id.chkjella);
        chkredbeans = findViewById(R.id.chkredbeans);
        chkaloe = findViewById(R.id.chkaloe);
        chkpearl = findViewById(R.id.chkpearl);
        chkcoconut = findViewById(R.id.chkcoconut);
        chkjade = findViewById(R.id.chkjade);
        chkpudding = findViewById(R.id.chkpudding);

        txtCnt = findViewById(R.id.txtCount);
        txtMOA = findViewById(R.id.txtMOA);

        Button.OnClickListener chooseSize = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()) {
                    case R.id.medium : { iUnitPrice = 45; break; }
                    case R.id.large : { iUnitPrice = 80; break; }
                    case R.id.bottled : { iUnitPrice = 100; break; }
                }
                showMOA(caculateMOA());
                Log.d("KKK", Integer.toString(iUnitPrice));
            }
        };

        Button btn = findViewById(R.id.medium);
        btn.setOnClickListener(chooseSize);
        btn = findViewById(R.id.large);
        btn.setOnClickListener(chooseSize);
        btn = findViewById(R.id.bottled);
        btn.setOnClickListener(chooseSize);

        Button.OnClickListener chooseCount = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()) {
                    case R.id.less : {
                        if(iCount>0) {
                            iCount--;
                        }
                        break;
                    }
                    case R.id.plus : {
                        iCount++;
                        break;
                    }
                }
                showCount(iCount);
                showMOA(caculateMOA());
                Log.d("KKK", Integer.toString(iCount));
            }
        };

        btn = findViewById(R.id.less);
        btn.setOnClickListener(chooseCount);
        btn = findViewById(R.id.plus);
        btn.setOnClickListener(chooseCount);

        chkperilla.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
        chkjella.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
        chkredbeans.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
        chkaloe.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
        chkpearl.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
        chkcoconut.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
        chkjade.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
        chkpudding.setOnCheckedChangeListener(new BonusOnCheckedChangeListener());
    }

    private class BonusOnCheckedChangeListener implements CompoundButton.OnCheckedChangeListener{
        @Override
        public void onCheckedChanged(CompoundButton button,boolean isChecked){
            if(button.isChecked()){
                iAddOn += 10;
            } else {
                iAddOn -= 10;
            }
            showMOA(caculateMOA());
            Log.d("KKK", Integer.toString(iAddOn));
        }
    }

    private void showCount(int cnt) {
        txtCnt.setText(Integer.toString(cnt));
    }

    private void showMOA(int moa) {
        txtMOA.setText(Integer.toString(moa));
    }

    private int caculateMOA() {
        int iRet = (iUnitPrice+iAddOn) * iCount;
        return iRet;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".PosActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="金額"
            android:textSize="50sp" />

        <TextView
            android:id="@+id/txtMOA"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_weight="1"
            android:text="0"
            android:textAlignment="viewEnd"
            android:textSize="80sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/medium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Medium"
            android:textSize="20sp" />

        <Button
            android:id="@+id/large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Large"
            android:textSize="20sp" />

        <Button
            android:id="@+id/bottled"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Bottle"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="杯數"
            android:textSize="50sp" />

        <TextView
            android:id="@+id/txtCount"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_weight="1"
            android:text="0"
            android:textAlignment="viewEnd"
            android:textSize="80sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/less"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="-"
            android:textSize="50sp" />

        <Button
            android:id="@+id/plus"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="+"
            android:textSize="50sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/chkperilla"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Perilla" />

        <CheckBox
            android:id="@+id/chkjella"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Jella" />

        <CheckBox
            android:id="@+id/chkredbeans"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="RedBean" />

        <CheckBox
            android:id="@+id/chkaloe"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Aloe" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/chkpearl"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Pearl" />

        <CheckBox
            android:id="@+id/chkcoconut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Coconut" />

        <CheckBox
            android:id="@+id/chkjade"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Jade" />

        <CheckBox
            android:id="@+id/chkpudding"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Pudding" />
    </LinearLayout>

</LinearLayout>
看更多先前的回應...收起先前的回應...

謝謝!讓我有些概念,那如果我在size那邊是這樣用的話 後面的加料怎麼改...加上if else嗎

 public void onClick(View v) {
 switch (v.getId()) {
   case R.id.less: {
   if (count > 0) {count--;               textView.setText( "" + count );
   if (medium.isChecked()) {    total_price.setText( Integer.toString( Integer.parseInt( "45" ) * count ) );
counter = Integer.parseInt( total_price.getText().toString() ); bottled.setChecked( false );
} else if (bottled.isChecked()) { total_price.setText( Integer.toString
( count * 0 ) );
count = Integer.parseInt( total_price.getText().toString() );
Toast toast = Toast.makeText( Main20Activity.this, " 無瓶裝! 請重新選擇!", LENGTH_SHORT );
toast.show();
} else {               
total_price.setText( Integer.toString( Integer.parseInt( "80" ) * count ) );
 counter = Integer.parseInt( total_price.getText().toString() );
 bottled.setChecked( false );
                            }
                     }
                  break;
               }
case R.id.plus: {
  if (count < max) {
    count++;      
    textView.setText( "" + count );
  if (large.isChecked()) {        total_price.setText( Integer.toString( Integer.parseInt( "80" ) * count ) );
 counter = Integer.parseInt( total_price.getText().toString() );  bottled.setChecked( false );
 } else if (bottled.isChecked()) { total_price.setText( Integer.toString
 ( count * 0 ) );
 count = Integer.parseInt( total_price.getText().toString() );
Toast toast = Toast.makeText( Main20Activity.this, "  無瓶裝! 請重新選擇!", LENGTH_SHORT );
toast.show();
} else {   
total_price.setText( Integer.toString( Integer.parseInt( "45" ) * count ) );
counter = Integer.parseInt( total_price.getText().toString() ); bottled.setChecked( false );
             }
        } break;
     }
   }

我是寫兩個if
第一個if是如果按下"-" 如果杯數>0 杯數顯示會累加
第二個if是如果中杯isChecked 總價會顯示
("45" * 杯數)
之後我把瓶裝的設定false 如果按下就會顯示 無瓶裝請重新選擇
但這樣我的加料是不是很難用..

所有的UI元件都只做一件事,就是「設定變數值」
顯示的部份,寫在另一個函式

我的做法是:大家只做好自己的事,一件事就好
杯數 +/-:點了就加減杯數(iCount)
大中小杯:點了就設定目前是大/中/小杯的單價(iUnitPrice)
加料:點了就加價/減價(iAddOn)

然後最重要的是
計算總價只要寫在一個地方就好,以免錯亂

private int caculateMOA() {
   int iRet = (iUnitPrice+iAddOn) * iCount;
   return iRet;
}

這樣子不管你的畫面設計如何變化
要按鈕、下拉、核取式、甚至文字方塊...
都不會影響到總價的計算

給你看我的版面你應該比較清楚!!https://ithelp.ithome.com.tw/upload/images/20190808/20119440htUvfZRIQe.png

用checkBox 但只能單選
加料部分複選

我有試過你的 但要怎麼讓他中杯大杯只能單選???

用 RadioButton, 如下
https://ithelp.ithome.com.tw/upload/images/20190808/20001787LpWgIhLwn6.png

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <RadioButton
            android:id="@+id/medium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Medium"/>
        <RadioButton
            android:id="@+id/large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large"/>
    </RadioGroup>
    <Button
        android:id="@+id/bottled"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bottle"/>
</LinearLayout>

我現在卡在一個點就是,老師要我用Checkbox來做單選
但如果使用Checkbox做單選 不是就得用if else來判斷嗎 這樣最後面的總金額還能搞定嗎

喔我解決了! 那加料部分如果有+20元的加料 那if else要怎麼判斷呢海綿寶寶

我不知道你程式是怎麼寫的
如果照我上面寫的
只要改成以下判斷(假設珍珠20元)
其他部份都不需變動

    if(button.isChecked()){
        if(button.getId()==R.id.chkpearl) {
            iAddOn += 20;
        } else {
            iAddOn += 10;
        }
    } else {
        if(button.getId()==R.id.chkpearl) {
            iAddOn -= 20;
        } else {
            iAddOn -= 10;
        }
    }

我要發表回答

立即登入回答