首页 > 代码库 > Gridview 单选效果实现,且用且珍惜

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的运行结果如下: