由浅入深理解Android中的回调机制(二)【实现简易购物车功能】
来源:互联网 发布:魔法王座神器升级数据 编辑:程序博客网 时间:2024/05/20 13:09
上篇文章介绍了接口回调和Android中回调机制的应用,对接口回调也有了一个较深的认识。在此基础上今天用接口回调的知识来完成一个简易的购物车功能(重点是接口回调,不是购物车哦)。
先来看图吧
上图中商品列表其实是一个ListView,由于只是演示接口回调的应用,所以只在ListView中填充了一条数据。而最下边的结算一栏是在ListView的外部,那么当商品数量改变时结算总价必然会跟随变化,也就是下边的结算会随着点击加号或者减号而变化。
做过item的子控件的点击事件的小伙伴应该清楚,item中子控件的点击事件是在Adapter中完成的(点此查看文章item子控件的点击事件),那么在ListView中点击子控件控件如何将得到的结果显示到ListView外部呢?即商品数量改变了,如何将总价格更新到ListView外部的结算出?其实就可以用接口回调来完成。
接下来看实现思路。
(1.)首先我们可以定义一个接口,接口里边包含两个抽象方法,分别负责增加和减少商品数量。
(2.)接下来让MainActivity实现该接口并重写两个方法。
(3.)然后可以在Adapter类中声明一个接口的引用,并给“+”和“-”各设置一个监听事件,当“+”被点击的时候我们用接口去调用增加商品的方法,同理,当“-”被点击的时候我们通过接口取调用减少商品的方法。而通过接口去调用这两个方法其实是回调到了MainActivity中,所以我们就可以在MainActivity重写的两个方法中去实现我们想要完成的事情。
如果没看懂思路没关系,下面用代码说话。
- 定义一个接口,接口里边包含两个抽象方法,分别负责增加和减少商品数量。
package com.example.smily.callback;/** * Created by zhpan on 2016/7/28. * 回调接口 */public interface SetOnNumListener { // 增加商品数量的回调方法 void onAddNumListener(int price,ViewHolder holder); //减少商品数量的回调方法 void onSubNumListener(int price,ViewHolder holder);}
- MainActivity实现该接口并重写接口中的两个方法
package com.example.smily.callback;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements SetOnNumListener { ListView mListView; TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView= (ListView) findViewById(R.id.lv_main); mTextView= (TextView) findViewById(R.id.tv_main); MyAdapter adapter=new MyAdapter(this); mListView.setAdapter(adapter); } /** * 在此实现增加商品数量,并更新总价格 * @param price * @param holder */ @Override public void onAddNumListener(int price,ViewHolder holder) { String numStr = holder.num.getText().toString(); int num=Integer.parseInt(numStr); num++; holder.num.setText(num+""); int totalPrice=price*num; mTextView.setText("结算:¥"+totalPrice); } /** * 在此实现减少商品数量,并更新总价格 * @param price * @param holder */ @Override public void onSubNumListener(int price,ViewHolder holder) { String numStr = holder.num.getText().toString(); int num=Integer.parseInt(numStr); if(num>1){ num--; holder.num.setText(num+""); int totalPrice=price*num; mTextView.setText("结算:¥"+totalPrice); }else{ Toast.makeText(MainActivity.this, "不能再减少了", Toast.LENGTH_SHORT).show(); } }}
- Adapter类中声明一个接口的引用,并给“+”和“-”各设置一个监听事件,在监听事件中执行回调方法。
package com.example.smily.callback;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;/** * Created by zhpan on 2016/7/28. * item中的数据并没有在getView()方法中添加,而是是在item布局文件中添加的。 */public class MyAdapter extends BaseAdapter { Context mContext; SetOnNumListener setOnNumListener; public MyAdapter(Context mContext) { this.mContext = mContext; setOnNumListener= (SetOnNumListener) mContext; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView=View.inflate(mContext,R.layout.item,null); final ViewHolder holder=new ViewHolder(); holder.add = (TextView) convertView.findViewById(R.id.tv_item_add); holder.sub = (TextView) convertView.findViewById(R.id.tv_item_sub); holder.num = (TextView) convertView.findViewById(R.id.tv_item_num); // “+”的监听事件 holder.add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 回调方法 setOnNumListener.onAddNumListener(10, holder); } }); // “-”的监听事件 holder.sub.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 回调方法 setOnNumListener.onSubNumListener(10,holder); } }); return convertView; } @Override public int getCount() { return 1; } @Override public Object getItem(int i) { return null; }}
ListView对应的ViewHolder类
import android.widget.TextView;/** * Created by zhpan on 2016/7/28. */public class ViewHolder { TextView sub; TextView num; TextView add;}
源码下载
- 由浅入深理解Android中的回调机制(二)【实现简易购物车功能】
- 由浅入深理解Android中的回调机制(一)
- 由浅入深理解android 消息机制
- Android实现购物车功能
- 简易购物车实现
- 简易购物车---购物车的实现
- JavaWeb_Session实现简易购物车
- 简易购物车的实现
- Android购物车初步实现2(功能篇)
- Android购物车的功能实现(二级列表)
- Android购物车全选功能实现·
- Android 购物车功能的实现
- Android-RecyclerView实现购物车简单功能
- Android-RecyclerView实现购物车简单功能
- Android--ExpandableListview购物车简单功能实现
- 购物车实现(二)
- 购物车实现功能
- 购物车功能实现
- 友盟崩溃日志分享,dsym工具
- GNU GLOBAL Source Code Tag System浏览源码,很方便
- java Socket用法详解
- iFrame请求数据
- 版本更新下载
- 由浅入深理解Android中的回调机制(二)【实现简易购物车功能】
- nginx的upstream目前支持4种方式的分配
- 【OpenCV笔记 15-1】OpenCV寻找物体的凸包convexHull
- RB-tree与Hashtable的区别与选择
- 打击破解软件,终于有解决良方了!
- UIWindow&UIWindowLevel
- JAVA代码
- HTTP,TCP/IP相关
- Android版本更新