標籤:
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; } } }}
在寫listView 時候要重寫BaseAdapter
需要在沒個item都加上button 點擊button做相應操作
這個時候需要button裡面設定下 這行的屬性
button.setTag(item.user.name);
然後處理button事件。
這個東西在一些需要用到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); } else { vh = (ViewHolder) convertView.getTag(); } //其他的代碼可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4 }
你可以看看android的源碼,特別有listview的,你就會發現這個函數很多時候有妙用!呵呵!
我的一點理解是,綁定資料,特別是綁定資料到view。而且可以用getTag()取得,很方便,而且是任意類型的資料,真的很酷。
在執行個體BaseAdapter()的getView(position, convertView, par)裡有用到。convertView這裡會用到setTag() getTag()。就可以產生convertView並複用裡面的widget
一直覺得這個東西沒啥用setTag(),不過只要能用上 就是比較巧的了
在一個程式中呢 我有好多個button 我想點擊一個出現1 點擊第二個出現2
Java代碼:
for (int i = 0; i < 20; i++) { cells[i] = (ImageView) findViewById(cellIDs[i]); cells[cellnumber++].setOnClickListener(new OnClickListener() { public void onClick(View v){ cellClicked(cellnumber, v); } }); }
上面的代碼效率不高 而且 無論點擊哪一個都會出現21 當然這是我邏輯錯誤,那怎麼實現呢?
Java代碼:
OnClickListener listener = new OnClickListener() { public void onClick(View v) { 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); }
Android setTag()/getTag()