PS:长时间不写博客了,今天来写一下美团的这个点餐界面,今天先写一个加号减号的接口调用,下一篇是总体,有点菜,评价,商家,还有左边的listview和右边的展现项。进入这篇正题,像listview,GridView等这些view都有写好的一些点击监听,但有些并非我们想要用到的,好比说listview内部有按钮,我们要点击,并且还要在该item项上作一些操做,好比说数字加减并显示在页面上,实时显示。这就用到了今天的内部点击事件的回调,固然这只是一种方法,也可能有其余更简单的方法。今天就主要说一下相似于美团的加减餐数量的回调。java
美团图:android
这个图是比较好看的,今天所写的代码就不如这个了,主要是说回调ide
步骤布局
主布局里添加一个listview,这个就省略了。this
布局也是简单的,这里的加号和减号,我没有给你们把图片给你们,随便一个图片便可,就算没有图片一个btn也是能够的spa
这里的左边一个textview ,左右分别是加号和减号,还有一个num(textview)显示。code
<TextView android:id="@+id/id_lv_name" android:layout_width="0dp" android:layout_height="wrap_content" android:text="火腿" android:layout_marginLeft="5dp" android:layout_gravity="center|left" android:textSize="20dp" android:layout_weight="0.7"/> <ImageView android:id="@+id/id_lv_minus" android:layout_width="0dp" android:layout_height="wrap_content" android:src="@drawable/btnminus" android:layout_weight="0.1"/> <TextView android:id="@+id/id_lv_num" android:layout_width="0dp" android:layout_height="match_parent" android:text="1" android:textSize="20dp" android:gravity="center" android:layout_weight="0.1"/> <ImageView android:id="@+id/id_lv_add" android:layout_width="0dp" android:layout_height="wrap_content" android:src="@drawable/btnadd" android:layout_weight="0.1"/>
这个是关键,里面须要有自定义的接口用做回调。blog
这里面有一个类Item,就是一个实体类,里面只有name和num,和setget方法。具体看注释。接口
public class MyAdapterListView extends BaseAdapter { public Context context; public List<Item> list; private int num1; public MyAdapterListView(Context context, List<Item> list) { this.context = context; this.list = list; }
public View getView(final int i, View view, ViewGroup viewGroup) { // int num=0; if(view == null){ view=LayoutInflater.from(context).inflate(R.layout.lv_item,null); viewHolder=new ViewHolder(); viewHolder.name= (TextView) view.findViewById(R.id.id_lv_name); viewHolder.minus= (ImageView) view.findViewById(R.id.id_lv_minus); viewHolder.numText= (TextView) view.findViewById(R.id.id_lv_num); viewHolder.add= (ImageView) view.findViewById(R.id.id_lv_add); view.setTag(viewHolder); } viewHolder= (ViewHolder) view.getTag(); viewHolder.name.setText(""+list.get(i).getName()); viewHolder.numText.setText(""+list.get(i).getNum());
//定义接口 public interface OnMyItemClickListener{ //ID , 数量 void onBtnItemListener(TextView tv, int i, int num); } public OnMyItemClickListener onMyItemClickListener; public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener){ this.onMyItemClickListener=onMyItemClickListener; }
viewHolder.minus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { num1 = list.get(i).getNum();//获取到(减号)改动过的 数量 num1 = num1 -1; if(num1 <=0){//逻辑判断,若是减为0的话,就一直为0,要否则就是符号了。 num1 =0; } onMyItemClickListener.onBtnItemListener(viewHolder.numText,i, num1);//使用刚才自定义的接口。 } }); viewHolder.add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { num1 = list.get(i).getNum();//获取到(加号)改动过的 数量
num1++;
viewHolder.numText.setText(num1 +""); onMyItemClickListener.onBtnItemListener(viewHolder.numText,i, num1); } });
主要仍是调用Adapter中建立的接口,而后使用的时候再获取改变的num值,而后经过listData.get(i).setNum(num)修改该id的数据,而后让适配器更新一下。
Item item; for (int i = 0; i < 30; i++) { item = new Item(); item.setName("ceshi" + i); item.setNum(0); listData.add(item); } myAdapterListView = new MyAdapterListView(this, listData); listview.setAdapter(myAdapterListView);//接口回调adapter中的方法,修改值之后再返回数据,更新适配器 myAdapterListView.setOnMyItemClickListener(new MyAdapterListView.OnMyItemClickListener() { @Override public void onBtnItemListener(TextView tv, int i, int num) { // Toast.makeText(MainActivity.this, "第:"+i+" 个---"+num, Toast.LENGTH_SHORT).show(); listData.get(i).setNum(num); myAdapterListView.notifyDataSetChanged(); } });
完。 事件