前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >美团点餐—listview内部按钮点击事件

美团点餐—listview内部按钮点击事件

原创
作者头像
cMusketeer
发布2018-04-05 21:59:26
2.6K4
发布2018-04-05 21:59:26
举报
文章被收录于专栏:Android机器圈Android机器圈

PS:像listview,GridView等这些view都有写好的一些点击监听,但有些并不是咱们想要用到的,比如说listview内部有按钮,咱们要点击,而且还要在该item项上做一些操作,比如说数字加减并显示在页面上,实时显示。这就用到了今天的内部点击事件的回调,当然这只是一种方法,也可能有其他更简单的方法。今天就主要说一下类似于美团的加减餐数量的回调。

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

步骤

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

效果图:

1:第一步

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

2:item布局样式

代码语言:java
复制
<?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方法。具体看注释

代码语言:java
复制

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中回调方法

代码语言:java
复制
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的数据,然后让适配器更新一下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PS:像listview,GridView等这些view都有写好的一些点击监听,但有些并不是咱们想要用到的,比如说listview内部有按钮,咱们要点击,而且还要在该item项上做一些操作,比如说数字加减并显示在页面上,实时显示。这就用到了今天的内部点击事件的回调,当然这只是一种方法,也可能有其他更简单的方法。今天就主要说一下类似于美团的加减餐数量的回调。
  • 1:第一步
  • 2:item布局样式
  • 3:自定义适配器的创建
  • 4:activity中回调方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档