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的運行結果如下:

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM