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. redis的常用公共方法

    实用redis已经有一段时间了,今天刚好有空记录一下所用到的方法,欢迎指正 首先我封装了一些字段信息 #region 字段 /// <summary> /// Redis服务器地址 /// ...

  2. 八年架构师大咖首次揭秘,年薪50W秘籍!

    序言 我是土生土长的老北京人,你们肯定觉得我很有钱,为啥呢? 因为觉得我是北京户口,其实你们错了,我的房子是靠我自己买的,父母基本上没帮到我什么,当然,我也不需要吧! 我只想说,作为一名程序员,我很自 ...

  3. [设计]GUI设计规范的规范

    1. 前言 很多著名的软件企业都有GUI设计规范,如 Apple 和 Google,得益于这些设计规范(或者叫指南),设计者才可以开发出符合平台视觉及交互要求的UI.其实除了这些大公司,软件公司都最好 ...

  4. JavaScript奇技淫巧

    单行写一个评级系统 var rate = 3; "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate); CSS调试黑科技,所有元素加 随机色的outlin ...

  5. wpf 研究之道 winform or wpf,u choose who?

    很久以前,我们用winform做过一个五子棋的程序,当时用winform的画图,先画出棋盘...后来项目的研究阶段,偶尔用winform做个小工具.闲暇之余,看到介绍wpf的资料,只知道它采用了xam ...

  6. Java 多线程之线程池的使用

    一. 使用背景 谈到Java多线程,我们很自然的会想到并发,在编写多线程代码时,我们一般会创建多个线程,如果并发的线程数量很多,而且每个线程都是执行一个时间很短的任务就结束了,这样频繁的进行线程的创建 ...

  7. 直播-rtmp学习

    RTMP(实时消息传输协议),官方介绍如下: Adobe’s Real Time Messaging Protocol (RTMP), an application-level protocol de ...

  8. Problem : (1.2.1) Text Reverse

    #include<iostream> using namespace std; void main() { char arr[1000]; int a,n; int s,t; cin> ...

  9. Pandas与Matplotlib基础

    pandas是Python中开源的,高性能的用于数据分析的库.其中包含了很多可用的数据结构及功能,各种结构支持相互转换,并且支持读取.保存数据.结合matplotlib库,可以将数据已图表的形式可视化 ...

  10. Tomcat5.5.9+JSP经典配置实例

    一.开发环境配置 第一步:下载j2sdk和tomcat:到sun官方站(http://java.sun.com/j2se/1.5.0/download.jsp)下载j2sdk,注意下载版本为Windo ...