美团点餐—listview内部按钮点击事件
时间:2022-05-07
本文章向大家介绍美团点餐—listview内部按钮点击事件,主要内容包括PS:像listview,GridView等这些view都有写好的一些点击监听,但有些并不是咱们想要用到的,比如说listview内部有按钮,咱们要点击,而且还要在该item项上做一些操作,比如说数字加减并显示在页面上,实时显示。这就用到了今天的内部点击事件的回调,当然这只是一种方法,也可能有其他更简单的方法。今天就主要说一下类似于美团的加减餐数量的回调。、1:第一步、2:item布局样式、3:自定义适配器的创建、4:activity中回调方法、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
PS:像listview,GridView等这些view都有写好的一些点击监听,但有些并不是咱们想要用到的,比如说listview内部有按钮,咱们要点击,而且还要在该item项上做一些操作,比如说数字加减并显示在页面上,实时显示。这就用到了今天的内部点击事件的回调,当然这只是一种方法,也可能有其他更简单的方法。今天就主要说一下类似于美团的加减餐数量的回调。
这个图是比较好看的,今天所写的代码就不如这个了,主要是说回调
步骤
- 主布局里面只有一个listview控件
- item布局样式
- 自定义适配器的创建
- activity中回调方法
效果图:
1:第一步
主布局里添加一个listview,这个就省略了。
2:item布局样式
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_height="50dp">
<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"/>
</LinearLayout>
3:自定义适配器的创建
这个是关键,里面需要有自定义的接口用作回调。
这里面有一个类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;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
ViewHolder viewHolder;
@Override
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());
//
// 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){
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);
}
});
return view;
}
class ViewHolder{
private TextView name;
private ImageView minus;
private TextView numText;
private ImageView add;
}
//定义接口
public interface OnMyItemClickListener{
//ID , 数量
void onBtnItemListener(TextView tv, int i, int num);
}
public OnMyItemClickListener onMyItemClickListener;
public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener){
this.onMyItemClickListener=onMyItemClickListener;
}
}
4:activity中回调方法
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);
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();
}
});
主要还是调用Adapter中创建的接口,然后使用的时候再获取改变的num值,然后通过listData.get(i).setNum(num)修改该id的数据,然后让适配器更新一下。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 60行代码徒手实现深度神经网络
- 30行代码徒手实现logistic回归
- 8,模型的训练
- 在腾讯云上部署科学计算软件Amber
- 手把手教你搭建一个灰度发布环境
- Kibana: 如何使用 Search Bar
- 「PHP」以nginx、php-cgi为例,把nginx、php-cgi安装为Windows系统服务
- 聊聊dubbo-go的GenericFilter
- 知新 | koa框架入门到熟练第二章
- JVM学习二
- 微信小程序对接云开发录音文件识别nodejs sdk
- 利用python读取WORD文档中的创建者信息
- LeetCode-2.两数相加 使用链表加法实现
- Spring学习(2):Spring Bean管理(上)
- 聊聊dubbo-go的TpsLimitFilter