您的位置:首页 > 移动开发 > Android开发

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

2015-08-28 22:17 288 查看
在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的妙用还是能节省不少代码的,对于程序美观性还是有不少作用的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: