前言
正如上次所说,最近两个星期在做一个Android端关于电子商城的项目。在各种繁忙的学业和平时的琐事中抽出两个星期,写了一个还不是非常完善的电子商城项目,算是对前面所学的Android基础知识一次综合运用吧,对我个人而言,也是一次大的总结。正好过完这个小时就双11了,好了,废话不多说,先上图吧。
实际效果图
首页点进去每一个对应栏目会有相应的详情列表
对应的每个商品详情页,图片都是从服务器异步加载过来的,当然这一张张图全是楼主精心的去天猫上抠来的图,可谓是心血之作。
这里商品大图页是可以滑动浏览的,当然这边其实很简单,一个viewPager和适配器适配一下网络传过来的图片数据就好了。不过这中间要注意的是,由于抠来的图都是清晰度非常高的,也就是说不经过相应的处理很容易造成内存溢出的困境,所以我们会有相应的处理。这些以后再说,然后是详情页fragment
还有评论页,这里因为数据都是我加的,是在懒得打评论,所以基本上没有几个商品有评论,但评论确实都可以加载和展示这一点是没问题的
这是登录界面,这里有个动画效果是参照别人的写出来的,就是每当焦距从用户栏切到密码栏会有相应的捂脸动作表示不看密码的意思,这里自我感觉也是蛮有趣的
然后这里是购物车,那个圆点按钮也感觉蛮好的,花了大概半个小时,但觉得还是蛮不错的,这里的每次增加减少都会保存到数据库中,当然我感觉这种方式不太好,我的想法是,当用户点击增加或减少按钮的时候会有一个按钮和edittext弹出来,并且遮住那个数量,当用户更改完成后点击确认更改再确认更改数据,这样容错率会更高一点。不过由于时间比较赶,也就没有做过多的改动了,而且目前增删反应也很流畅,当数量为1
时继续-就会从购物车移除了,点击结算按钮就会跳到相应的结算界面
这个界面也可以在商品详情页的点击购买跳转过来,这里会显示出商品的总价格,由于支付宝支付接口没有时间调用了,而且还要涉及到签约什么的问题,这里我是直接给了一个用户余额,足够则会购买成功,否则会他出看看,随随便便6k多,哎~可是楼主其实不是土豪呀~但拿来装逼还是可以用的,吞云吐雾,不就是钱嘛~买!
当然,结果往往事与愿违啊
好啦,我还是收回一下逗比的性格,言归正传,目前为止两个星期大概就做了这么多,基本上前段后台服务端数据库都是一个人在写,确实蛮累的,但也感觉前段时间学到的知识融会贯通,确实有了一个蛮大的提升的。之前画了用例图画类图画了好几天,后来编码过程中慢慢发现有些不对的地方就慢慢的改,之前一直觉得自己设计不行,但这次到这个成型,虽然界面部分很多是参考天猫,但是界面设计也应该不是我的事,主要是功能点和ui的实现。总之,一件事,决定了做就认真的去做,就算知道或者感觉自己做不了,只要决定了就去做。要不一开始你就不要决定去做,这是我的感受,也是我做人做事的准则吧。
代码
由于代码量比较大,这次不会一次全部贴出来,我会在这里从前到后,按结构跟大家把代码过一遍,其实重要的不在于代码本身,只要思路明确,做什么都不是大问题。后续的代码会在以后跟进。好了,废话不多说,上代码
首先包图
这里application用我们自己写的BaseApplication
package com.tmall.view.base;
import android.app.Application;
import android.content.Context;
import android.content.res.Resources;
import android.widget.Toast;
public class BaseApplication extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
static Toast mToast;
public static void makeText(String text) {
/*
* if (mToast == null) mToast = new Toast(context);//? mToast.cancel();
* mToast.setText(text); mToast.show();
*/
makeText(text, Toast.LENGTH_LONG);
}
public static void makeText(String text, int time) {
if (mToast != null)
mToast.cancel();
mToast = Toast.makeText(context, text, time);
mToast.show();
}
public static Resources getRresource(){
return getRresource();
}
}
然后就是首页的activity
package com.tmall.view;
import com.example.tmall.R;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;
public class HomeActivity extends FragmentActivity implements
OnCheckedChangeListener {
private HomeFragment homeFragment;
private BrandFragment brandFragment;
private CarFragment carFragment;
private CenterFragMent centerFragMent;
private FragmentManager fm;
private FragmentTransaction transaction;
private RadioButton rbHome;
private RadioButton rbBrand;
private RadioButton rbCar;
private RadioButton rbCenter;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_home);
findView();
init();
}
private void init() {
// 创建4个fragment
homeFragment = new HomeFragment();
brandFragment = new BrandFragment();
carFragment = new CarFragment();
centerFragMent = new CenterFragMent();
fm = getSupportFragmentManager();
rbHome.setChecked(true);
}
private void findView() {
rbHome = (RadioButton) findViewById(R.id.rbHome);
rbHome.setOnCheckedChangeListener(this);
rbBrand = (RadioButton) findViewById(R.id.rbBrand);
rbBrand.setOnCheckedChangeListener(this);
rbCar = (RadioButton) findViewById(R.id.rbCar);
rbCar.setOnCheckedChangeListener(this);
rbCenter = (RadioButton) findViewById(R.id.rbCenter);
rbCenter.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int id = buttonView.getId();
switch (id) {
case R.id.rbHome:
if (rbHome.isChecked()) {
transaction = fm.beginTransaction();
homeFragment = null;
homeFragment = new HomeFragment();
transaction.replace(R.id.flContent, homeFragment);
transaction.commit();
}
break;
case R.id.rbBrand:
if (rbBrand.isChecked()) {
transaction = fm.beginTransaction();
brandFragment = null;
brandFragment = new BrandFragment();
transaction.replace(R.id.flContent, brandFragment);
transaction.commit();
}
break;
case R.id.rbCar:
if (rbCar.isChecked()) {
transaction = fm.beginTransaction();
carFragment = null;
carFragment = new CarFragment();
transaction.replace(R.id.flContent, carFragment);
transaction.commit();
}
break;
case R.id.rbCenter:
if (rbCenter.isChecked()) {
transaction = fm.beginTransaction();
centerFragMent = null;
centerFragMent = new CenterFragMent();
transaction.replace(R.id.flContent, centerFragMent);
transaction.commit();
}
break;
default:
break;
}
}
}
四个底层显示的fragment
package com.tmall.view;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;