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. css实现文本缩略显示

    转载自http://blog.csdn.net/mushui0633/article/details/65685655 单行: 对应的css中加入 overflow:hidden;//超出一行文字自动 ...

  2. es6学习笔记--字符串&数值&数组&函数&对象的扩展

    这几天抽空学习了es6语法,关于字符串,数值,数组,函数以及对象的扩展,看到es6标准入门这本书,里面讲的扩展特别多,我认为有几部分在项目上用不到,就挑有用的当笔记学习了. 字符串的扩展 str.in ...

  3. 项目角度谈矢量切片运用以及Geoserver处理自定义规格矢量切片方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1. 背景 矢量切图方案目前已经是很常见的一个方案,在2016年时团队 ...

  4. 牛客小白月赛1 A-简单题

    描述 Etéreo 是个爱学习的好孩子.在年假期间,他依然热情于数学.他最近发现了一个高大上的东西:,他觉得这里的  非常的厉害!然后他又告诉你:,,他会告诉你  和  ,想请你告诉他  的值.当然这 ...

  5. 淘宝镜像 cnpm 不是内部命令

    升级npm之后安装淘宝镜像,然后一直提示不是内部命令,网上查看文章 http://blog.csdn.net/fighting_2017/article/details/76979844,发现是路径问 ...

  6. A Proof of Stake Design Philosophy - PoS权益证明设计理念

    之前在EthFans上看到了关于PoS(权益证明)的相关文章(原文链接),本着学习的态度,对这篇文章进行了翻译.第一次翻译关于区块链的文章,有些单词及句子的措辞还不是很准确,如果发现有翻译的不恰当的地 ...

  7. 数据库连接问题之:Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!

    要么是驱动问题(没加载到工程中去或者其他问题)要么是账号密码或者url或者driver写错 driver:com.mysql.jdbc.Driver url:jdbc:mysql://localhos ...

  8. WordPress文章页添加展开/收缩功能

    很多时候我们在WordPress上发布一些文章的时候里面都包含了很多的代码,我一般又不喜欢把代码压缩起来而喜欢让代码格式化显示,但是格式化显示通常会让文章内容看起来很多,不便于访问者浏览,所以今天就介 ...

  9. [UWP]理解ControlTemplate中的VisualTransition

    1. 前言 VisualTransition是控件模板中的重要组成部分,无论是自定义控件或者修改控件样式都会接触到VisualTransition.明明这么重要,博客园上好像都没多少关于VisualT ...

  10. 2016最热门的PHP框架

    每个PHP框架都拥有各自独特的地方.同时PHP语言已经获得了巨大的认同并且成为了世界上最通用的服务器脚本语言.PHP也俨然成为了最容易学习的web动态开发语言.在PHP发展的同时,PHP框架也迅速崛起 ...