2013-04-09 46 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

相关问题