2013-04-09 65 views
13

我有16個按鈕,我標記他們將一些條款設置爲按鈕並從sqlite數據庫導入。所以,我標記它們是這樣的:如何設置多個標籤到一個按鈕?

// labelForButton and tagForButton 
     class MyStruct { 
     public MyStruct (String lab, String t){ 
     label = lab; 
     tag = t; 
    } 
     private String label; 
     private String tag; 
     } 

mDbHelper.open(); 

      Cursor c = mDbHelper.getSpojnice(generateWhereClause()); 

      ArrayList<MyStruct> labelsA = new ArrayList<MyStruct>(); 
      ArrayList<MyStruct> labelsB = new ArrayList<MyStruct>(); 

      labelsA.add(new MyStruct(c.getString(2), "1")); // this tag should be the same to button that matches 
      labelsB.add(new MyStruct(c.getString(3), "1")); 
      labelsA.add(new MyStruct(c.getString(4), "2")); 
      labelsB.add(new MyStruct(c.getString(5), "2")); 
      labelsA.add(new MyStruct(c.getString(6), "3")); 
      labelsB.add(new MyStruct(c.getString(7), "3")); 
      labelsA.add(new MyStruct(c.getString(8), "4")); 
      labelsB.add(new MyStruct(c.getString(9), "4")); 
      labelsA.add(new MyStruct(c.getString(10), "5")); 
      labelsB.add(new MyStruct(c.getString(11), "5")); 
      labelsA.add(new MyStruct(c.getString(12), "6")); 
      labelsB.add(new MyStruct(c.getString(13), "6")); 
      labelsA.add(new MyStruct(c.getString(14), "7")); 
      labelsB.add(new MyStruct(c.getString(15), "7")); 
      labelsA.add(new MyStruct(c.getString(16), "8")); 
      labelsB.add(new MyStruct(c.getString(17), "8")); 

      Collections.shuffle(labelsA); 
      Collections.shuffle(labelsB); 

      a1.setText(labelsA.get(0).label); 
      a1.setTag(labelsA.get(0).tag); 
      a1.setOnClickListener(clickListener); 
      b1.setText(labelsB.get(0).label); 
      b1.setTag(labelsB.get(0).tag); 
      b1.setOnClickListener(clickListener); 
      a2.setText(labelsA.get(1).label); 
      a2.setTag(labelsA.get(1).tag); 
      a2.setOnClickListener(clickListener); 
      b2.setText(labelsB.get(1).label); 
      b2.setTag(labelsB.get(1).tag); 
      b2.setOnClickListener(clickListener); 
. 
. 
. 
. 
} 
} 

所以,我需要A1和B1有相同的標籤,還A2和B2等。

但是,我還需要一些其他的理由,所有的A按鈕都有標籤,例如「A」和所有B的「B」。那麼,如何將多個標籤設置爲一個按鈕?

編輯:

我將此添加到我的string.xml:

<item type="id" name="KOLONA1"/> 
<item type="id" name="KOLONA2"/> 

然後添加標籤:

a1.setTag(R.id.KOLONA1, labelsA.get(0).tag); 
b1.setTag(R.id.KOLONA2, labelsA.get(0).tag); 

回答

8

您應該使用setTag(int key, Object tag)方法,這也需要第二個參數key。這將允許您設置多個tags每個Button這樣的:

button.setTag(1,object1); 
button.setTag(2,object2); 
+0

是的,但如何實現,在我的代碼時,我有類似的公共MyStruct(字符串實驗室,字符串t),後來你可以看到我如何使用它? – marjanbaz 2013-04-09 20:30:27

+0

我很抱歉,但我只能給你提示和建議。我無法爲你實現這個。 – 2013-04-09 20:55:14

+0

我已經添加到我的第一篇文章中的一些代碼,你至少可以檢查是否可以嗎? – marjanbaz 2013-04-09 21:03:42

4

嘗試:

button.setTag(R.id.resource_id1,obj1); 
button.setTag(R.id.resource_id2,obj2); 
button.setTag(R.id.resource_id3,obj3); 

,並獲得了標籤,使用

v.getTag(R.id.resource_id1); 
v.getTag(R.id.resource_id2); 
v.getTag(R.id.resource_id3); 

但是,這樣只會返回對象。你需要對它進行類型化。

+1

illegalargumentexception – 2015-10-20 12:45:25

+0

當您在設置或獲取異常時收到 – 2015-11-20 07:28:00

+0

密鑰必須是特定於應用程序的資源ID。一個視圖只能有一個標籤! – 2016-07-14 12:28:48

19

如果需要多個標籤添加到一個視圖中,那麼你必須定義每個標籤的ID在strings.xml文件,如:

<item type="id" name="section" /> 
<item type="id" name="hide_show" /> 

添加鍵,你可以在Java文件中使用這些按鍵像下面後:

rowView.setTag(R.id.section,mSectionList.get(position)); 
rowView.setTag(R.id.hide_show,"close"); 

這將設置標籤。 在獲取標籤的時候就需要強制轉換最初設置喜歡的對象:

String mSection=(String)rowView.getTag(R.id.section); 
String isOpen=(String)rowView.getTag(R.id.hide_show); 
+1

這節省了我的一天。 – 2017-02-07 10:00:35

+1

This working .... – 2018-03-07 02:12:00

1

定義密鑰ID在strings.xml,然後通過ID 例如得到它:

在String.xml聲明如下代碼

<item type="id" name="date" /> 

<item type="id" name="name" /> 

現在設置標籤像下面

share.setTag(R.id.date,it.adjournDate); 
share.setTag(R.id.name,it.partyName); 

分享是我的按鈕名稱

現在終於得到你想要收聽這樣這些值在按鈕標籤:

v.getTag(R.id.name) 
v.getTag(R.id.date) 
+0

像這樣使用 2016-05-27 06:25:35

相關問題