android购物车的实现

奋斗的麦子 发布于 2013/03/27 18:57
阅读 7K+
收藏 3

@红猎人 你好,想跟你请教个问题:我是学生,刚接触android,在做点菜系统,类似于图片中的,现在菜品

现在菜品之间切换做出来了,

剩下图中红笔圈出的商品数量加减没有思路,还有就是选好数目后,加入购物车的实现。请教一下高人,先谢谢了。

下图是我做出来的,在一个Activity中的TabHost中加了三个Tab,分别用来显示“招牌菜”“其他菜品”“酒水”,我下一步是想在每道菜的后面加一个数量,如上图中红线圈出来的,然后要在Activity中加一个触屏弹出菜单,菜单中有一个购物车的按钮,点击按钮会获取已点的菜和酒水名称及价钱,并且会生成一个清单,上面有已点信息及总价。




这是我的MenuActivity.java
package cn.csdn.activity;
import java.util.ArrayList;
import java.util.List;

import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.TabHost.TabContentFactory;

public class MenuActivity extends TabActivity {
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		final TabHost tabHost = getTabHost();

		tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("招牌菜")
				.setContent(new TabContentFactory() {

					List<Content> items;

					{
						items = new ArrayList<Content>();
						Content content = new Content();
						content.setTitle("极品贵宾翅");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a01);
						items.add(content);

						content = new Content();
						content.setTitle("杏汁炖官燕");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a02);
						items.add(content);

						content = new Content();
						content.setTitle("鲍汁扣辽参");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a03);
						items.add(content);

						content = new Content();
						content.setTitle("蚝皇南非干鲍");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a04);
						items.add(content);
						
						content = new Content();
						content.setTitle("奶汤河豚");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a05);
						items.add(content);
						
						content = new Content();
						content.setTitle("宫廷佛跳墙");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a06);
						items.add(content);
						
						content = new Content();
						content.setTitle("纯鸡汤");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a07);
						items.add(content);
						
						content = new Content();
						content.setTitle("干锅带皮黄牛肉");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a08);
						items.add(content);
						
						content = new Content();
						content.setTitle("港式多宝粒");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a09);
						items.add(content);
						
						content = new Content();
						content.setTitle("江鮰鱼两吃");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a10);
						items.add(content);
						
						content = new Content();
						content.setTitle("锦绣刺身拼");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a11);
						items.add(content);
						
						content = new Content();
						content.setTitle("榴莲煨甲鱼");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a12);
						items.add(content);
						
						content = new Content();
						content.setTitle("招牌炖鱼头");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a13);
						items.add(content);
						
						content = new Content();
						content.setTitle("堂灼翅汤东星斑");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a14);
						items.add(content);
						
						content = new Content();
						content.setTitle("意境养生黑蒜");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.a15);
						items.add(content);

					}

					@Override
					public View createTabContent(String tag) {
						ListView listView = new ListView(MenuActivity.this);
						listView.setAdapter(new ContentAdapter(
								MenuActivity.this, 0, items));

						return listView;
					}
				}));
		tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("其他菜品")
				.setContent(new TabContentFactory() {

					List<Content> items;

					{
						items = new ArrayList<Content>();
						Content content = new Content();
						content.setTitle("小米浸辽参");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b01);
						items.add(content);

						content = new Content();
						content.setTitle("木瓜炖燕窝");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b02);
						items.add(content);

						content = new Content();
						content.setTitle("木瓜炖雪蛤");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b03);
						items.add(content);

						content = new Content();
						content.setTitle("木瓜炖官燕");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b04);
						items.add(content);
						
						content = new Content();
						content.setTitle("鲍汁花菇扣鹅掌");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b05);
						items.add(content);
						
						content = new Content();
						content.setTitle("瑶柱松茸功夫汤");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b06);
						items.add(content);
						
						content = new Content();
						content.setTitle("金汤鱼唇扣鲍脯");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b07);
						items.add(content);
						
						content = new Content();
						content.setTitle("鲍鱼捞饭");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b08);
						items.add(content);
						
						content = new Content();
						content.setTitle("浓汤竹笙翅");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b09);
						items.add(content);
						
						content = new Content();
						content.setTitle("黄焖大鲍翅");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b10);
						items.add(content);
						
						content = new Content();
						content.setTitle("日式金汤翅");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b11);
						items.add(content);
						
						content = new Content();
						content.setTitle("泰国木瓜炖翅");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b12);
						items.add(content);
						
						content = new Content();
						content.setTitle("浓汤烩花胶");
						content.setComment("…");
						content.setImageUrl("" + R.drawable.b13);
						items.add(content);
						
					}

					@Override
					public View createTabContent(String tag) {
						ListView listView = new ListView(MenuActivity.this);
						listView.setAdapter(new ContentAdapter(
								MenuActivity.this, 0, items));

						return listView;
					}
				}));

		tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("酒水")
				.setContent(new Intent(this, ItemList.class)));
	}

	private class ContentAdapter extends ArrayAdapter<Content> {

		private List<Content> items;

		public ContentAdapter(Context context, int textViewResourceId,
				List<Content> items) {
			super(context, textViewResourceId, items);
			this.items = items;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view = convertView;

			if (view == null) {
				LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				view = inflater.inflate(R.layout.content, null);
			}

			Content content = items.get(position);
			if (content != null) {
				TextView title = (TextView) view
						.findViewById(R.id.ContentTitle);
				TextView comment = (TextView) view
						.findViewById(R.id.ContentComment);
				ImageView imageView = (ImageView) view.findViewById(R.id.image);

				title.setText(content.getTitle());
				comment.setText(content.getComment());
				imageView.setImageDrawable(MenuActivity.this.getResources()
						.getDrawable(Integer.parseInt(content.getImageUrl())));
			}

			return view;
		}
	}
}
这是content.java



package cn.csdn.activity;



public class Content {
	private String id;

	private String title;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getComment() {
		return comment;
	}

	public void setComment(String comment) {
		this.comment = comment;
	}

	public String getImageUrl() {
		return imageUrl;
	}

	public void setImageUrl(String imageUrl) {
		this.imageUrl = imageUrl;
	}

	private String comment;

	private String imageUrl;
}
这是menu.xml


<?xml version="1.0" encoding="utf-8"?>
<!-- 根元素是 TabHost ,我们这个文件要和TabActivity配合使用,在TabActivity的源代码里写死了要找的Id是android.R.id.tabhost,
    因此这里的ID也要定死成TabHost 的ID 是定死的 "@android:id/tabhost" 下面的类似,不再解释。 -->
<TabHost android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost">
    <!-- TabWidget 就是标签选项卡的头部部分,注意ID的写法 -->
    <TabWidget android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@android:id/tabs">
    </TabWidget>
    <!-- FrameLayout 就是标签的内容显示部分,注意ID的写法,还要注意我们做了个上部空白设定 android:paddingTop="65dp",是为了不让内容和标签重叠 -->
    <FrameLayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@android:id/tabcontent" android:paddingTop="65dp" >
        <!-- LinearLayout 是一个标签里的内容,程序根据你定义的ID来把他们放在不同的标签下面 -->
        <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/linearLayout1">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent" >
                	        <ImageView android:id="@+id/image" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:paddingRight="10dip" />
                	        	        <TextView android:id="@+id/ContentTitle"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:textStyle="bold" android:textSize="20sp"></TextView>
            </RelativeLayout>

            <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/textView1" android:text="标签1中的内容">
            </TextView>
        </LinearLayout>
        <!-- LinearLayout 是另一个标签里的内容-->
        <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/linearLayout2">
            <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/textView2" android:text="标签2中的内容">
            </TextView>
        </LinearLayout>
       <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/linearLayout3">
            <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/textView3" android:text="标签3中的内容">
            </TextView>
        </LinearLayout>


    </FrameLayout>
</TabHost>
这是content.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	android:orientation="vertical" android:textAppearance="?android:attr/textAppearanceLarge"
	android:minHeight="?android:attr/listPreferredItemHeight"
	android:paddingLeft="6dip" android:paddingBottom="6dip">
	<LinearLayout android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:orientation="horizontal"
		android:padding="5dip">
		<ImageView android:id="@+id/image" android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:paddingRight="10dip" />
		<TextView android:id="@+id/ContentTitle"
			android:layout_width="fill_parent" android:layout_height="wrap_content"
			android:textStyle="bold" android:textSize="20px"></TextView>

		<android.widget.NumberPicker
		    android:id="@+id/numberPicker1"
		    android:layout_width="wrap_content"
		    android:layout_height="wrap_content" />

	</LinearLayout>
	<TextView android:id="@+id/ContentComment"
		android:layout_width="fill_parent" android:layout_height="wrap_content"></TextView>
</LinearLayout>


加载中
0
曾赛
曾赛

做两件事:

1、自定义一个View用于显示“菜单项”。

    要完成这个任务,必须要学会,自定义组合View。可以Google自定义组合View或请教老师。这里有一个示例供你参考:http://www.cnblogs.com/noTice520/archive/2011/08/07/2130359.html

2、使用一个数据结构用于保存“某个菜单项”需要的“数量”。

    这个结构很简单,有很多现在的数据结构可以用,比如 @黑狗  同学说的Hashmap,你也可以自定义数据结构。比如创建一个结构包含两个成员计数器:

public class Counter {
    public void id; // 菜品编号
    public void count; // 菜品数量
}

用户每点个菜单你就添加一个计数器对象到LinkList中存储起来,如果LinkList中已经存在同一道菜的计数器,就直接更新菜品数量。如果菜品数量变为0,移除掉【这步也可以不做】。
点击结算时,遍历列表,算出价格。

还有很多方案,你自己可以设计和优化(可以推后再做)。

0
snamper
snamper

你是js还是什么?


奋斗的麦子
奋斗的麦子
用Java在eclipse上开发
0
曾赛
曾赛
能否把问题困难点,再详细一点说明一下,我想这不是Android特有的问题,大家也可以帮到你
奋斗的麦子
奋斗的麦子
您好,我把情况详细说明了一下,也把代码附上去了,您帮我看看,我现在是对于商品后面的商品数量加减没有思路,谢谢啦
0
华兹格
华兹格

先说这个效果是如何实现的


奋斗的麦子
奋斗的麦子
您好,我补充说明了问题,你帮我看看怎么实现下一步,谢谢啦
0
曾赛
曾赛
所以你的难点是如何在ListView中放入 数量调节组件 及 如何统计费用吗?
奋斗的麦子
奋斗的麦子
对对,就是这样,怎么做啊?
0
黑狗
黑狗

自定义一个layout,就是一个custom component,一个图片,一个菜名,一个价格,2个按钮,+和-,一个edittext。你有多少个菜就new多少component,放内存里,新建一个hashmap<id,componont>。每次操作的时候,修改map中的component属性。提交数据的时候,拼接好了提交就OK。

不知道说清楚了没?

自定义控件:

http://developer.android.com/guide/topics/ui/custom-components.html

PS:学会使用官网查资料。。。

奋斗的麦子
奋斗的麦子
谢谢啦,我就用你们的建议做一下,太感谢你们了
黑狗
黑狗
回复 @奋斗的麦子 : http://www.oschina.net/question/699232_103123
奋斗的麦子
奋斗的麦子
回复 @黑狗 : 看不到啊,也找不到啊?怎么回事?有没有链接什么的?
黑狗
黑狗
@奋斗的麦子 艾特你了 你去看下,其实很简单的这个。。。估计你还没怎么写过android的原因
奋斗的麦子
奋斗的麦子
回复 @黑狗 : 嗯,好吧,谢谢了,我在哪里可以查看你发的帖?
下一页
0
华兹格
华兹格
ListView的适配器需要重写,在重写的类里做这些操作
0
奋斗的麦子
奋斗的麦子

引用来自“红猎人”的答案

做两件事:

1、自定义一个View用于显示“菜单项”。

    要完成这个任务,必须要学会,自定义组合View。可以Google自定义组合View或请教老师。这里有一个示例供你参考:http://www.cnblogs.com/noTice520/archive/2011/08/07/2130359.html

2、使用一个数据结构用于保存“某个菜单项”需要的“数量”。

    这个结构很简单,有很多现在的数据结构可以用,比如 @黑狗  同学说的Hashmap,你也可以自定义数据结构。比如创建一个结构包含两个成员计数器:

public class Counter {
    public void id; // 菜品编号
    public void count; // 菜品数量
}

用户每点个菜单你就添加一个计数器对象到LinkList中存储起来,如果LinkList中已经存在同一道菜的计数器,就直接更新菜品数量。如果菜品数量变为0,移除掉【这步也可以不做】。
点击结算时,遍历列表,算出价格。

还有很多方案,你自己可以设计和优化(可以推后再做)。

谢谢了,这几天比较忙,一直没顾上看,我试试看,太感谢了。
0
南岸青栀
南岸青栀
楼主完成了吗?我现在也是在住购物车这一块。点击商品详情然后添加购物车过程是怎样一个过程啊。求求
0
sidney9111
sidney9111
明显上图就是商业的,下图就是学生的,这个我也不是针对楼主,我做了几年也只能做出下图,如果觉得这样就够了的人请无视我以下的话,如果你不想几年后这么悲剧,现在就要努力了,学美工,学策划,学产品,学唱歌,学做人!千万不要做程序猿!
返回顶部
顶部