小轩窗i
给时光以生命,而不是给生命以时光。 ——小菜鸟的飞行日记

设计一个非常简单的模拟电子商城的应用

包含如下3个Activity

1.首页。里面有商品信息列表(可以用几个button列表模拟实现)

2.商品详情页面。点击一个商品信息,可以进入该商品的详情页面

3.商品评价页面。商品详情页面有个用户评价按钮,点击之后可以跳转看到用户对该商品的评价。

(参考《第一行代码》)

--------------------------------------------------------------------------------------------------

1.定义一个商品实体类Goods,作为ListView适配器的适配类型。name表示商品名字,imageId表示对应图片的资源ID.

public class Goods {
    private String name;
    private int imageId;

    public String getName() {
        return name;
    }

    public int getImageId() {
        return imageId;
    }

    public Goods(String name, int imageId) {
        super();
        this.name = name;
        this.imageId = imageId;
    }

}

2.为 ListView 的子项指定一个我们自定义的布局,在 layout 目录下新建goods_item.xml.

在这个布局中,我们定义了一个 ImageView 用于显示水果的图片,又定义了一个TextView 用于显示水果的名称。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/iv_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:layout_marginLeft="10dp" />
</RelativeLayout>  

 

3.创建一个自定义的适配器,这个适配器继承自 ArrayAdapter,并将泛型指定为 Goods类。新建类 GoodsAdapter,代码如下所示:

public class GoodsAdapter extends ArrayAdapter<Goods> {
    private int resourceId;

    public GoodsAdapter(Context context, int resource, List<Goods> objects) {
        //重写父类构造函数,用于将上下文、ListView 子项布局的 id 和数据都传递进来
        super(context, resource, objects);
        // TODO Auto-generated constructor stub
        resourceId=resource;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    //getView()方法中有一个 convertView 参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用。
        
        Goods goods = getItem(position);// 得到当前项的Goods实例
        View view;
        /*在 getView()方法中进行了判断,如果 convertView 为空,则使用LayoutInflater 去加载布局,
         * 如果不为空则直接对 convertView 进行重用。
         * 这样就大大提高了ListView 的运行效率*/
        if (convertView == null)
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
        else
            view = convertView;
        
        ImageView image = (ImageView) view.findViewById(R.id.iv_image);
        TextView name = (TextView) view.findViewById(R.id.tv_name);
        image.setImageResource(goods.getImageId());
        name.setText(goods.getName());
        return view;
    }

4.MainActivity.java.

使用 setOnItemClickListener()方法来为 ListView 注册一个监听器,当用户点击了 ListView 中的任何一个子项时就会回调 onItemClick()方法, 在这个方法中可以通过 position 参数判断出用户点击的是哪一个子项,然后获取到相应的商品,并通过 Toast将商品的名字显示出来。

public class MainActivity extends Activity{
    ListView lv;
    List<Goods> list=new ArrayList<Goods>();
    Goods book,camera,gift,flower;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv=(ListView)findViewById(R.id.lv_goods);
        initGoods();//初始化商品
        GoodsAdapter adapter=new GoodsAdapter(MainActivity.this,R.layout.goods_item,list);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(new OnItemClickListener(){
            public void onItemClick(AdapterView<?> parent,View view,int position,long id){
                Goods goods=list.get(position);
                Toast.makeText(MainActivity.this, goods.getName(),
                        Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this,GoodsDetailedInfo.class);           
                intent.putExtra("Goods",goods.getName());
                startActivity(intent);
            }
        });
    }
    private void initGoods() {
        // TODO Auto-generated method stub
        book=new Goods("Book",R.drawable.book);
        camera=new Goods("Camera",R.drawable.camera);
        flower=new Goods("Flower",R.drawable.flower);
        gift=new Goods("Gift",R.drawable.gift);
        list.add(book);
        list.add(camera);
        list.add(flower);
        list.add(gift);
    }
    
}

 

运行效果如图:

 

--------------------------------------------------------------

实现其他几个Activity

GoodsDetailedInfo.java

 

public class GoodsDetailedInfo extends Activity{
    ImageView iv_show;
    TextView tv_show;
    Button btn_comment;
    String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_goods_detailed_info);
        
        iv_show=(ImageView) findViewById(R.id.iv_showInfo);
        tv_show=(TextView) findViewById(R.id.tv_showInfo);
        btn_comment=(Button) findViewById(R.id.btn_comment);
        
        show();
    }
 
    public void show(){
        Intent intent=getIntent();
        final String name=intent.getStringExtra("Goods");
 
        if(name.equals("Book")){
            iv_show.setImageResource(R.drawable.book);
            tv_show.setText(R.string.book);
            btn_comment.setOnClickListener(new OnClickListener(){
                public void onClick(View v) {
                    Intent intent=new Intent(GoodsDetailedInfo.this,Comment.class);
                    intent.putExtra("name",name);
                    startActivity(intent);                    
                }                
            });
        }
        else if(name.equals("Camera")){
            iv_show.setImageResource(R.drawable.camera);
            tv_show.setText(R.string.camera);            
            btn_comment.setOnClickListener(new OnClickListener(){
                public void onClick(View v) {                    
                    Intent intent=new Intent(GoodsDetailedInfo.this,Comment.class);
                    intent.putExtra("name",name);
                    startActivity(intent);                    
                }                
            });
        }
        else if(name.equals("Flower")){
            iv_show.setImageResource(R.drawable.flower);
            tv_show.setText(R.string.flower);
            btn_comment.setOnClickListener(new OnClickListener(){
                public void onClick(View v) {
                    Intent intent=new Intent(GoodsDetailedInfo.this,Comment.class);
                    intent.putExtra("name",name);
                    startActivity(intent);                    
                }                
            });
        }
        else if(name.equals("Gift")){
            iv_show.setImageResource(R.drawable.gift);
            tv_show.setText(R.string.gift);
            btn_comment.setOnClickListener(new OnClickListener(){
                public void onClick(View v) {
                    Intent intent=new Intent(GoodsDetailedInfo.this,Comment.class);
                    intent.putExtra("name",name);
                    startActivity(intent);                    
                }                
            });
        }                
    }    
} 

 

 

 Comment.java

 

public class Comment extends Activity {
    TextView tv_showComment;
    ImageView iv_show;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comment);
        iv_show=(ImageView) findViewById(R.id.iv_showInfo);
        tv_showComment=(TextView) findViewById(R.id.tv_showComment);
        showComment();
    }
 
    public void showComment(){
        
        Intent intent=getIntent();
        String name=intent.getStringExtra("name");
        if(name.equals("Book")){
            iv_show.setImageResource(R.drawable.book);
            tv_showComment.setText(R.string.book_comment);
            Log.i("name",name);
        }
        if(name.equals("Camera")){
            iv_show.setImageResource(R.drawable.camera);
            tv_showComment.setText(R.string.camera_comment);
            Log.i("name",name);
        }
        if(name.equals("Flower")){
            iv_show.setImageResource(R.drawable.flower);
            tv_showComment.setText(R.string.flower_comment);
            Log.i("name",name);
        }
        if(name.equals("Gift")){
            iv_show.setImageResource(R.drawable.gift);
            tv_showComment.setText(R.string.gift_comment);
            Log.i("name",name);
        }
        
        
    }
    public void back(View v){
        Intent intent=new Intent(this,MainActivity.class);
        startActivity(intent);
    }
}
 

 

实现效果:

 

posted on 2015-05-24 20:23  小轩窗i  阅读(233)  评论(0编辑  收藏  举报