这个东西在一些需要用到Adapter自定控件显示方式的时候非常有用
Adapter 有个getView方法,可以使用setTag把查找的view缓存起来方便多次重用
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mWidgetsSwitchApp
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.app_gallery_item, null);
vh = new ViewHolder();
vh.view1 = (ImageView) convertView.findViewById(R.id.view1);
vh.view2 = (ImageView) convertView.findViewById(R.id.view2);
vh.view3= (ImageView) convertView.findViewById(R.id.view3);
vh.view4 = (ImageView) convertView.findViewById(R.id.view4);
convertView.setTag(vh); 把一个holder放进去
} else {
vh = (ViewHolder) convertView.getTag(); 把里面内容取出来
}
//其他的代码可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4
}
View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。
可以用在多个Button添加一个监听器,每个Button都设置不同的setTag。这个监听器就通过getTag来分辨是哪个Button 被按下。
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- public class Main extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button button1 = (Button) findViewById(R.id.Button01);
- Button button2 = (Button) findViewById(R.id.Button02);
- Button button3 = (Button) findViewById(R.id.Button03);
- Button button4 = (Button) findViewById(R.id.Button04);
- MyListener listener = new MyListener();
- button1.setTag(1);
- button1.setOnClickListener(listener);
- button2.setTag(2);
- button2.setOnClickListener(listener);
- button3.setTag(3);
- button3.setOnClickListener(listener);
- button4.setTag(4);
- button4.setOnClickListener(listener);
- }
- public class MyListener implements View.OnClickListener {
- @Override
- public void onClick(View v) {
- int tag = (Integer) v.getTag();
- switch (tag) {
- case 1:
- System.out.println("button1 click");
- break;
- case 2:
- System.out.println("button2 click");
- break;
- case 3:
- System.out.println("button3 click");
- break;
- case 4:
- System.out.println("button4 click");
- break;
- }
- }
- }