当前位置: 代码迷 >> Android >> android-gettag()与settag()的妙用
  详细解决方案

android-gettag()与settag()的妙用

热度:81   发布时间:2016-04-27 23:14:12.0
android---gettag()与settag()的妙用

在android中,settag(Object)是可以给一个view添加一个特殊的标签,然后用gettag()获取这个标签.

用处1:多个button设置不同tag,通过tag区分
OnClickListener listener = new OnClickListener() {  public void onClick(View v) {//获取当前view对应的数字  int cellId = (Integer) v.getTag();  cellClicked(cellId, v);  }  }  View v;  for (int i = 0; i < 20; i++) {  v = findViewById(cellIDs[i]);  v.setOnClickListener(listener);  v.setTag(i);  }
用法2:在adapter中的getview实现回收的convertView的复用(这代码高亮搞不好,总是出问题)
@Override    public View getView(int position, View convertView, ViewGroup parent) {        phonedemo demo;        if (convertView==null) {            convertView = LayoutInflater.from(context).inflate(R.layout.cell, null);            demo = new phonedemo();            demo.name = (TextView) convertView.findViewById(R.id.name);            demo.number = (TextView) convertView.findViewById(R.id.number);            demo.img = (ImageView) convertView.findViewById(R.id.imageView1);            demo.name.setText(data.get(position).getName());            demo.number.setText(data.get(position).getNumber());//          demo.img.setImageResource(data.get(position).getId());            //利用tag达到循环利用资源            convertView.setTag(demo);        }else {            //这里获取已经回收的demo,并不用重新创建,这样就可以                     直接复用,节省资源            demo = (phonedemo) convertView.getTag();            demo.name.setText(data.get(position).getName());            demo.number.setText(data.get(position).getNumber());//          demo.img.setImageResource(data.get(position).getId());        }        return convertView;    }    public static class phonedemo{    TextView name,number;    ImageView img;    }
用处3:当开关来使用,比如对于手电筒,tag设置为true开启,为false,关闭.
//控制语句if ((Boolean) flashlight.getTag() == false) {            startflashlight();        }else{            stopflashlight();        }
protected void startflashlight() {        //使用transitiondrawable来控制动画,也就是flashlight.xml这个文件        TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable();         //控制转变时间200毫秒        drawable.startTransition(200);        //设置标识,如果被打开,则tag为true        flashlight.setTag(true);        /*         * 下面开始打开照相机,然后处理图像到后台,然后设置闪光灯打开         */        try {            /*             * camera和其组件之间的交流,通过参数parmeters来进行关联,camera可以获取当前的状态参数             * 再通过setparameters来进行设置新的参数             */            mcamera = Camera.open();//打开照相机            int texttrueid = 0;            //?暂时不知道是啥            mcamera.setPreviewTexture(new SurfaceTexture(texttrueid));            mcamera.startPreview();            mparaters = mcamera.getParameters();            //设置打开闪光的,并点亮            mparaters.setFlashMode(Parameters.FLASH_MODE_TORCH);            mcamera.setParameters(mparaters);        } catch (Exception e) {        }    }    /*     * 控制闪光的的关闭     */    protected void stopflashlight() {        TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable();        if((Boolean) flashlight.getTag()){            drawable.reverseTransition(200);            flashlight.setTag(false);            if(mcamera != null){                mparaters = mcamera.getParameters();                mparaters.setFlashMode(Parameters.FLASH_MODE_OFF);                mcamera.setParameters(mparaters);                mcamera.stopPreview();//停止预览                mcamera.release();//释放掉资源,不然下次打不开                mcamera = null;//设置为null为了垃圾回收机制尽快回收            }        }    }
上面三个例子都挺常用的,tag的妙用还是能节省不少代码的,对于程序美观性还是有不少作用的.

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案