zoukankan      html  css  js  c++  java
  • Gridview 单选效果实现,且用且珍惜

      Gridview 单选效果,在androidapp中实现非常频繁,我这里提供我的一种思路,这是我的思维导图:

      

      怎么样将这样的思维导图翻译成java代码了,请看下面的代码了:

      

        // 电子产品的图片列表信息
        static class ConfigInfo {
            static final int[] img = { R.drawable.electron_dvdplay,
                    R.drawable.electron_toudaishishexianji,
                    R.drawable.electron_miniyinxiang,
                    R.drawable.electron_weidan_camera };
        }
        static class ConfigInfos{
            static final int[] imgs = { R.drawable.electron_dedplat_select,
                R.drawable.electron_toudaishishexiangji_select,
                R.drawable.electron_miniyinxiang,
                R.drawable.electron_weidan_select };        
        }
        // GridView 设配数据
    
        class Gridadapter extends BaseAdapter {
    
            List<Electronic> listbean;
            Context context;
            private int lastPosition = -1; // 记录上一次选中的图片位置,-1表示未选中任何图片
            private boolean multiChoose; // 表示当前适配器是否允许多选
            private List<Boolean> mImage_bs = new ArrayList<Boolean>(); // 定义一个向量作为选中与否容器
            private List<Integer> mSelectItems = new ArrayList<Integer>();
    
            public Gridadapter(Context context, List<Electronic> listbean,
                    Boolean isMulti) {
                this.context = context;
                this.listbean = listbean;
                multiChoose = isMulti;
    
                for (int i = 0; i < listbean.size(); i++)
                    mImage_bs.add(false);
            }
    
            //
            // private LayerDrawable makeBmp(Electronic id, boolean isChosen) {
            // Bitmap mainBmp = ((BitmapDrawable) context.getResources()
            // .getDrawable(id.getIcon())).getBitmap();
            //
            // // 根据isChosen来选取对勾的图片
            // Bitmap seletedBmp;
            // if (isChosen == true)
            // seletedBmp = BitmapFactory.decodeResource(
            // context.getResources(), R.drawable.gridview_chech_bg1);
            // else
            // seletedBmp = BitmapFactory.decodeResource(
            // context.getResources(),
            // R.drawable.electron_shuma_camera);
            //
            // // 产生叠加图
            // Drawable[] array = new Drawable[2];
            // array[0] = new BitmapDrawable(mainBmp);
            // array[1] = new BitmapDrawable(seletedBmp);
            // LayerDrawable la = new LayerDrawable(array);
            // la.setLayerInset(50, 50, 50, 50, 50);
            // la.setLayerInset(1, 10, -5, 60, 45);
            //
            // return la; // 返回叠加后的图
            // }
    
            // public void changeState(int position) {
            // // 多选时
            // if (multiChoose == true) {
            // mImage_bs
            // .setElementAt(!mImage_bs.elementAt(position), position); // 直接取反即可
            // }
            // // 单选时
            // else {
            // if (lastPosition != -1)
            // mImage_bs.setElementAt(false, lastPosition); // 取消上一次的选中状态
            // mImage_bs
            // .setElementAt(!mImage_bs.elementAt(position), position); // 直接取反即可
            // lastPosition = position; // 记录本次选中的位置
            // }
            // notifyDataSetChanged(); // 通知适配器进行更新
            // }
    
            @Override
            public int getCount() {
                return listbean.size();
    
            }
    
            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return listbean.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(final int position, View convertView,
                    ViewGroup parent) {
                final Handle handle;
                if (convertView == null) {
                    convertView = LayoutInflater.from(context).inflate(
                            R.layout.grivview_textview_img, null);
                    handle = new Handle();
                    handle.imageView = (ImageView) convertView
                            .findViewById(R.id.Grid_image);
                    handle.tv = (TextView) convertView.findViewById(R.id.grid_tv);
                    convertView.setTag(handle);
                } else {
                    handle = (Handle) convertView.getTag();
                }
                // 设置数据
                // handle.imageView.setBackgroundResource(listbean.get(position)
                // .getIcon());
                int resId = mImage_bs.get(position) ? ConfigInfos.imgs[position]
                        : ConfigInfo.img[position];
                handle.imageView.setImageResource(resId);
                // handle.imageView.setBackgroundDrawable(makeBmp(
                // listbean.get(position), mImage_bs.get(position)));
                handle.imageView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Log.v("图片中的项目", "你点击了按钮" + listbean.get(position)
                                + position);
                        boolean selected=mImage_bs.get(position);
                        mImage_bs.set(position, !selected); 
                        notifyDataSetChanged();
                    }
                });
    
                return convertView;
            }

      通过这么篇幅代码,我们可以得出来这样的结论:

      Ⅰ用了两个实体类存储图片的实体的信息,一个布尔数组来存储是否选中的结果。

      Ⅱ点击了相应的某项以后,使其该布尔数组所对应的布尔变量变成相应的非值。

      这样的gridview的运行结果如下:

      

      

  • 相关阅读:
    IE浏览器下报错: strict 模式下不允许一个属性有多个定义
    Vue 做的项目在IE下面打开一片空白解决方法
    小程序如何动态修改标题navigationBarTitleText
    小程序-for循环遍历的使用
    vue项目-打印页面中指定区域的内容(亲测有效!)
    vue省市区三级联动(高仿京东)
    vue-父组件向子组件传值
    Sea.js 手册与文档
    angular之模块开发二
    angular之跨域
  • 原文地址:https://www.cnblogs.com/manuosex/p/3695620.html
Copyright © 2011-2022 走看看