效果視頻
【Android】線上自助點餐系統(tǒng)
商品選購界面
效果圖

商品數(shù)據(jù)
由于沒有服務(wù)器,無法網(wǎng)絡(luò)獲取商品信息,故化繁從簡,將需要的商品信息保存成xml文件,次項目將商品信息分為三個文件:標(biāo)題文件,商品詳細(xì)信息文件,商品圖片文件。
商品標(biāo)題文件
<resources>
<string-array name="title">
<item>把酒言歡</item>
<item>爆炒干鍋</item>
<item>海鮮派對</item>
<item>辣度自選</item>
<item>素菜最愛</item>
<item>旺季龍蝦</item>
<item>無肉不歡</item>
<item>主食飽腹</item>
</string-array>
</resources>
商品詳細(xì)文件信息
由于篇幅過長,就沒有顯示全部商品信息,每一個商品信息分為:商品名稱,商品規(guī)格,商品價格三個小類
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="content">
<!-- title:把酒言歡-->
<item>可樂</item>
<item>一瓶</item>
<item>3.00</item>
<item>雪花</item>
<item>一瓶</item>
<item>5.00</item>
<item>怡寶</item>
<item>一瓶</item>
<item>2.00</item>
</string-array>
</resources>
商品圖片
由于篇幅過長,例舉部分商品圖片信息
<resources>
<integer-array name="icon">
<item>@drawable/kele</item>
<item>@drawable/xuehua</item>
<item>@drawable/yibao</item>
</integer-array>
</resources>
添加商品數(shù)據(jù)
解析左側(cè)標(biāo)題數(shù)據(jù)
private void InitTitle(){
String[] titleArray = getResources().getStringArray(R.array.title);
for (int i = 0; i < titleArray.length; i++) {
goodsTitle = new Goods.GoodsTitle(titleArray[i],i );
titleList.add( goodsTitle );
}
}
解析右側(cè)商品數(shù)據(jù)
private void InitContent(){
TypedArray iconArray = getResources().obtainTypedArray(R.array.icon);
int index = 0;
String[] content = getResources().getStringArray(R.array.content);
for (int i = 0; i < content.length ; i+=3) {
//if (index < iconArray.length())
/*把酒言歡*/
if ( i < 3){
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,0 );
}else if (i < 8){
/*爆炒干鍋*/
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,1 );
}else if ( i < 12){
/*海鮮派對*/
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,2 );
}else if ( i < 16){
/*辣度自選*/
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,3 );
}else if ( i < 22){
/*素菜最愛*/
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,4 );
}else if ( i < 25){
/*旺季龍蝦*/
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,5 );
}else if ( i < 28){
/*無肉不歡*/
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,6 );
}else
/*主食飽腹*/
goodsContent = new Goods.GoodsContent( iconArray.getResourceId(index++,0), content[i], content[i+1], Float.parseFloat(content[i+2]),R.drawable.icon_add,R.drawable.icon_sub,0,7 );
contentList.add( goodsContent );
}
}
左側(cè)標(biāo)題與右側(cè)商品雙向綁定
我們在添加左側(cè)標(biāo)題的時候有一個參數(shù),為每一個小類的標(biāo)識。同樣在添加商品數(shù)據(jù)的時候,根據(jù)商品所屬小類進(jìn)行了分類。
private void InitListener(){
titleAdapter.setOnItemClickListener( new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
String[] titleArray = getResources().getStringArray(R.array.title);
titleAdapter.setSelection( position );
titleAdapter.notifyDataSetChanged();
contentManager.scrollToPositionWithOffset( titleArray.length,0 );
}
} );
mGoodsContent.addOnScrollListener( new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled( recyclerView, dx, dy );
int firstPosition = contentManager.findFirstVisibleItemPosition();
goodsContent = contentList.get(firstPosition);
int subId = goodsContent.getSubId();
int pos = 0;
for (int i = 0; i < titleList.size(); i++) {
int id = titleList.get(i).getId();
if ((subId == id)) {
pos = i;
}
}
titleAdapter.setSelection(pos);
//mGoodsTitle.scrollToPosition( pos );
titleAdapter.notifyDataSetChanged();
}
} );
加減按鈕監(jiān)聽
對每一個商品的加減按鈕進(jìn)行點擊事件監(jiān)聽
contentAdapter.setOnItemChildClickListener( new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
double Price = contentList.get( position ).getPrice();
switch (view.getId()){
case R.id.Add:
int numberAdd = contentList.get( position ).getNumber();
numberAdd++;
Monetary(Price);
contentList.get( position ).setNumber( numberAdd );
contentAdapter.notifyDataSetChanged();
//Toast.makeText( FunctionActivity.this,"Add"+Price,Toast.LENGTH_SHORT ).show();
break;
case R.id.Sub:
int numberSub = contentList.get( position ).getNumber();
if (numberSub > 0 ){
numberSub--;
contentList.get( position ).setNumber( numberSub );
LessMoney(Price);
}else if (numberSub < 0){
contentList.get( position ).setNumber( 0 );
}
contentAdapter.notifyDataSetChanged();
//Toast.makeText( FunctionActivity.this,"Sub"+Price,Toast.LENGTH_SHORT ).show();
break;
}
}
} );
并且每次點擊事件更新所選商品總額,并且對所選商品下限設(shè)定為15元,方才能進(jìn)行支付。
private void Monetary(double Money){
TotalMoney+=Money;
money.setText( doubleToString(TotalMoney) );
if (TotalMoney > 15){
MoreThanStyle();
}else {
LessStyle();
}
}
private void LessMoney(double Money){
TotalMoney-=Money;
if (TotalMoney < 15){
LessStyle();
money.setText( 0+"" );
}else {
MoreThanStyle();
money.setText( doubleToString(TotalMoney) );
}
}
所選商品存入數(shù)據(jù)庫
將所選的商品信息保存到數(shù)據(jù)庫,方便對其進(jìn)行存取
private void GotoSettlement(){
String user = (String) sp.GetData(FunctionActivity.this,"UserName_login","");
String pass = (String) sp.GetData(FunctionActivity.this,"PassWord_login","");
for (int i = 0; i <contentList.size() ; i++) {
int num = contentList.get( i ).getNumber();
if (num > 0){
/*插入數(shù)據(jù)為null*/
//Toast.makeText( context,""+num,Toast.LENGTH_SHORT ).show();
goodsList = new GoodsList(user,pass, contentList.get( i ).getGoodsIMG(),contentList.get( i ).getContent(),contentList.get( i ).getPrice(),contentList.get( i ).getNumber(),R.drawable.icon_sub,R.drawable.icon_add );
dao.Insert( goodsList );
}
}
}
商品復(fù)選
此界面可以對所選商品進(jìn)行復(fù)選,可以看見商品總額,并對其進(jìn)行最后確認(rèn)
效果圖

取出商品數(shù)據(jù)
從數(shù)據(jù)庫中將用戶所選商品進(jìn)行取出,并添加到此適配器中
private void InitData(){
goodsLists = dao.QueryAll();
for (int i = 0; i <goodsLists.size() ; i++) {
goodsList = new GoodsList(goodsLists.get(i).getUserName(),goodsLists.get(i).getPassWord(), goodsLists.get( i ).getImg(),goodsLists.get( i ).getName(),goodsLists.get( i ).getPrice(),goodsLists.get( i ).getNumber(),goodsLists.get( i ).getSub(),goodsLists.get( i ).getAdd() );
dataList.add( goodsList );
}
}
商品清空
將適配器中所有子項刪除
goodsAllClear.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
goodsListAdapter.removeAllItem( dataList );
goodsTotalNumber.setText( 0+"" );
goodsTotalPrice.setText( 0+"" );
}
} );
商品增刪
private void Listener(){
goodsListAdapter.setOnItemChildClickListener( new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
int num = dataList.get( position ).getNumber();
double price = dataList.get( position ).getPrice();
switch (view.getId()){
case R.id.goodsAdd:
goodsListAdapter.addPrice(dataList,price,position,num);
InitBarData();
//Toast.makeText( GoodsListActivity.this,"Add"+num,Toast.LENGTH_SHORT ).show();
break;
case R.id.goodsSub:
goodsListAdapter.subPrice(dataList,price,position,num);
InitBarData();
//Toast.makeText( GoodsListActivity.this,"Sub"+num,Toast.LENGTH_SHORT ).show();
break;
}
}
} );
}
支付界面
效果圖

密碼匹配
此控件為自定義view,具體代碼不展示,有興趣的可以觀看另外一篇文章,鏈接已掛
人臉支付與密碼支付
payPassWord.setOnTextFinishListener(new PayPwdEditText.OnTextFinishListener() {
@Override
public void onFinish(String str) {
String Pay = "000000";
if (str.equals( Pay ))
{
toastFormat.setText("支付成功");
toastFormat.show();
startActivity(new Intent(PaymentActivity.this,PaySuccessActivity.class));
}else {
toastFormat.setText("密碼錯誤");
toastFormat.show();
payPassWord.clearText();
}
}
});
支付成功
效果圖

SharedPreferences
利用SharedPreferences
完成數(shù)據(jù)傳遞,關(guān)于SharedPreferences封裝可以觀看另外一篇文章。
sp = SP.getInstance();
money = (String) sp.GetData(PaySuccessActivity.this,"TotalPrice","");
歷史數(shù)據(jù)圖表化
此圖標(biāo)工具采用第三方APIhellocharts
效果圖

數(shù)據(jù)初始化
從數(shù)據(jù)庫取出購買商品數(shù)據(jù)
dao = new Dao(context);
goodsLists = dao.QueryAll();
Totalnum = goodsLists.size();
X軸
從數(shù)據(jù)庫中取出商品名稱,并作為X軸
數(shù)據(jù)文章來源:http://www.zghlxwxcb.cn/news/detail-478304.html
for (int i = 0; i <goodsLists.size() ; i++) {
title.add(goodsLists.get(i).getName());
}
Y軸
分為內(nèi)外兩層循環(huán),外循環(huán)覺得總的小類,內(nèi)循環(huán)決定一個小類有幾根柱子;例如:用戶購買了4個商品,分別顯示商品的價格以及數(shù)量,則外循環(huán)為4,內(nèi)循環(huán)為2;文章來源地址http://www.zghlxwxcb.cn/news/detail-478304.html
for (int j = 0; j < Totalnum ; j++) {
mPointValues = new ArrayList<>();
for (int i = 0; i < single; i++) {
mPointValues.add(new SubcolumnValue((goodsLists.get(j).getPrice()), color.get(j)));
//值的大小、顏色
//設(shè)置X軸的柱子所對應(yīng)的屬性名稱(底部文字)
axisXValues.add(new AxisValue(j).setLabel(title.get(j)));
}
Column column = new Column(mPointValues);
ColumnChartValueFormatter chartValueFormatter = new SimpleColumnChartValueFormatter(2);
column.setFormatter(chartValueFormatter);
column.setHasLabelsOnlyForSelected(false);
column.setHasLabels(true);
//column.setValues(mPointValues);
//將每個屬性得列全部添加到List中
//添加了7個大柱子Column,單個大柱子里面mPointValues大小為3(自行調(diào)整)
columns.add(column);
}
尾言
由于篇幅原因,并未將全部代碼貼出
到了這里,關(guān)于【Android】線上自助點餐系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!