• Android学习笔记之 SimpleAdapter 中添加按钮响应事件,getView的重写


    Andriod 里面的ListView是一个显示列表数据的控件,常用适配器SimpleAdapter进行绑定,绑定代码如下:
    ListView lstView = (ListView) this.findViewById(R.id.listView1);
    SimpleAdapter adapter=new SimpleAdapter(context, data, resource, from, to);
    lstView.setAdapter(adapter);

      

    ListView 列表中的元素的单击事件响应:
    OnItemClickListener mItemClickListener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
             // TODO Auto-generated method stub
        }
    };
    listView.setOnItemClickListener(mItemClickListener);

    对于Button ,ImageButton这样的按钮控件实现单事件,接下来我们看看如何实现这样的功能:

    继承SimpleAdapter进行重写getView方法

    为什么不继承BaseAdapter适配器进行处理,因为BaseAdapter是一个非常基础的基类,对于一般的TextViwe ,ImageView,Button控件的数据绑定都没有实现

    java代码:

    private class MySimpleAdapter extends SimpleAdapter {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View v = super.getView(position, convertView, parent);
                
            ImageButton btn=(ImageButton) v.findViewById(R.id.icon);
            btn.setTag(position);
            btn.setOnClickListener(new OnClickListener() {
                    
            @Override
            public void onClick(View v) {
               // TODO Auto-generated method stub
                        
               mDataList.remove((int)v.getTag());
               notifyDataSetChanged();
               Toast.makeText(getApplicationContext(), "µ¥»÷ÎÒÁË"+v.getTag(), 1).show();
                     
            }
          });
          return v;
        }
    
         public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
              super(context, data, resource, from, to);
              // TODO Auto-generated constructor stub
          }    
    }

    上面代码实现的是,点击列表头像删除该项。注意在删除之后必须用notifyDataSetChanged更新列表。

    因为继承SimpleAdapter已经实现了常用控件数据的绑定功能,使用super.getView(position, convertView, parent)就可以直接得到一个列表项的索引,接下来就是为ListView的每一项的Button添加事件。

    当单击某个按钮时,按钮事件需要知道单击的是ListView的哪一项,可以为每个Button对象添加一个Tag,我们这里用listview的项position的索引作为tag。

    关于setTag和getTag:

    View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。

    可以用在多个Button添加一个监听器,每个Button都设置不同的setTag。这个监听器就通过getTag来分辨是哪个Button 被按下。

     
  • 相关阅读:
    vue动态组件
    服务端渲染和nuxt简单介绍
    nuxt Window 或 Document未定义解决方案
    知乎专栏开放性api
    小程序的一些坑
    搭建微服务器(续)
    调研pwa和sw
    mysql索引原理以及优化
    装饰器
    斐波那契数列和小青蛙跳跳跳问题
  • 原文地址:https://www.cnblogs.com/AminHuang/p/4088490.html
Copyright © 2020-2023  润新知