PS:长时间不写博客了,今天来写一下美团的这个点餐界面,今天先写一个加号减号的接口调用,下一篇是整体,有点菜,评价,商家,还有左边的listview和右边的展示项。进入这篇正题,像listview,GridView等这些view都有写好的一些点击监听,但有些并不是咱们想要用到的,比如说listview内部有按钮,咱们要点击,而且还要在该item项上做一些操作,比如说数字加减并显示在页面上,实时显示。这就用到了今天的内部点击事件的回调,当然这只是一种方法,也可能有其他更简单的方法。今天就主要说一下类似于美团的加减餐数量的回调。

美团图:

这个图是比较好看的,今天所写的代码就不如这个了,主要是说回调

步骤

  1. 主布局里面只有一个listview控件
  2. item布局样式
  3. 自定义适配器的创建
  4. activity中回调方法

1:第一步

主布局里添加一个listview,这个就省略了。

2:item布局样式

布局也是简单的,这里的加号和减号,我没有给大家把图片给大家,随便一个图片即可,就算没有图片一个btn也是可以的

这里的左边一个textview   ,左右分别是加号和减号,还有一个num(textview)显示。

<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"/>

3:自定义适配器的创建

这个是关键,里面需要有自定义的接口用作回调。

这里面有一个类Item,就是一个实体类,里面只有name和num,和setget方法。具体看注释。

3.1首先自定义一个adapter,重写里面的一些方法即可,这里是局部代码。

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;
}

 3.2 主要是getview方法,这里是又写了一个ViewHolder类。

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());

 3.3 重点来了创建接口,这里定义了一个方法,需要传入textview控件和  position,和加号(减号)改变的数据。

//定义接口
public interface OnMyItemClickListener{
//ID , 数量
void onBtnItemListener(TextView tv, int i, int num);
}
public OnMyItemClickListener onMyItemClickListener;
public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener){
this.onMyItemClickListener=onMyItemClickListener;
}

  3.4:加号和减号用法// num1 = 0; 加减号 使用接口

        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); } });

4:activity中回调方法

主要还是调用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();
}
});

  

完。  

  

美团点餐—listview内部按钮点击事件的更多相关文章

  1. 22 Notification样式设置内部按钮点击事件

    package com.exam1ple.demo1; import android.app.Activity; import android.app.NotificationManager; imp ...

  2. 在Activity中响应ListView内部按钮的点击事件

    最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...

  3. 在Activity中响应ListView内部按钮的点击事件的两种方法!!!

    在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...

  4. 在Activity中响应ListView内部按钮的点击事件的两种方法

    转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...

  5. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  6. Objective-C:模拟按钮点击事件理解代理模式

    OC中的协议(Protocol)和和.NET中的接口(Interface)类似,简单来讲,就是一系列方法的列表,其中声明的方法可以被任何类实现.不同的是,在.NET中,如果某个类实现了一个接口,就必须 ...

  7. js触发按钮点击事件

    js触发按钮点击事件 博客分类: javascript   模拟JS触发按钮点击功能 <html> <head> <title>usually function&l ...

  8. 按钮点击事件,打开新的Activity

    按钮点击事件,打开新Activity, 打开网页 findViewById(R.id.btnStartBAty).setOnClickListener(new View.OnClickListener ...

  9. Javascript之三种按钮点击事件

    学习Javascript必须要先掌握基本的事件方法和语法,这些都是我们学过的也是最基本的.以前忘了总结,所以现在回顾,综合地总结一下,温故而知新. Javascript有三种按钮点击事件,分别为ale ...

随机推荐

  1. js监听input输入框值的实时变化实例

    情景:监听input输入框值的实时变化实例 解决方法:1.在元素上同时绑定oninput和onporpertychanger事件 实例:<script type="text/JavaS ...

  2. 关于LINUX各类系统资源整合

    在系统维护的过程中,随时可能有需要查看 CPU和内存的使用率,并根据相应信息分析系统状况的需求.本文介绍一下几种常见的Linux系统资源查看命令. 1.总体内存占用的查看 命令:free 图1 fre ...

  3. Hive数据仓库笔记(二)

    分区和桶:   分区:可以提高查询的效率,只扫描固定范围数据,不用全部扫描 CREATE TABLE logs (ts BIGINT, lineSTRING) PARTITIONED BY (dt S ...

  4. BZOJ2329 HNOI2011 括号修复 splay+贪心

    找平衡树练习题的时候发现了这道神题,可以说这道题是近几年单考splay的巅峰之作了. 题目大意:给出括号序列,实现区间翻转,区间反转和区间更改.查询区间最少要用几次才能改成合法序列. 分析: 首先我们 ...

  5. 《深入理解Bootstrap》读书笔记(一)

    栅格系统 实现原理 通过定义容器大小,平分12份,再调整内外边距,最后结合媒体查询. 通过一系列包含内容的行和列来创建页面布局.下面列出了 Bootstrap 栅格系统是如何工作的: 1.行必须放置在 ...

  6. [Oracle] UNIX与Windows 2000上Oracle的差异(III)

    作者:Ian Adam & David Stien, SAIC Ltd 日期:19-Dec-2003 出处:http://www.dbanotes.net翻译:Fenng ORACLE 的安装 ...

  7. Java 后端微信支付demo

    Java 后端微信支付demo 一.导入微信SDK 二.在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建) 三.实现微信的WXPayConfig接口 ...

  8. 神奇的RAC宏

    先说说RAC中必须要知道的宏 RAC(TARGET, [KEYPATH, [NIL_VALUE]])   使用: RAC(self.outputLabel, text) = self.inputTex ...

  9. 0x00-Kali Linux 系列入门篇

    Kali Linux介绍篇 Kali Linux 官网:https://www.kali.org/ Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Li ...

  10. [css 揭秘]:CSS编码技巧

    CSS编码技巧 我的github地址:https://github.com/FannieGirl/ifannie 喜欢的给我一个星吧 尽量减少代码重复 尽量减少改动时需要编辑的地方 当某些值相互依赖时 ...