如何为按钮设置多个标签?

22

我有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);
4个回答

28

如果您需要将多个标记添加到一个视图中,则需要在strings.xml文件中为每个标记定义ID,例如:

如果您需要在一个视图中添加多个标签,则必须在strings.xml文件中为每个标签定义ID,如下所示:

<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
这救了我的一天。 - Abdul Gaffar

8

您应该使用setTag(int key, Object tag)方法,该方法还需要第二个参数key。这将允许您在每个Button上设置多个tags,如下所示:

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

是的,但当我有像 public MyStruct(String lab,String t)这样的东西时,我该如何在我的代码中实现呢?稍后您将看到我的使用方式。 - marjanbaz
很抱歉,我只能给你一些提示和建议。我不能为你实现这个。 - Ovidiu Latcu
我在我的第一篇帖子中添加了一些代码,你能否至少检查一下是否正确? - marjanbaz
8
这将抛出非法参数异常。 - Arun kumar
2
密钥必须是特定于应用程序的资源ID。 - Luca Ziegler

7

尝试:

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
非法参数异常 - Arun kumar
当您在设置或获取时遇到异常。 - M.Prabha karan
关键字必须是应用程序特定的资源ID。一个视图只能有一个标签! - Luca Ziegler
不起作用。密钥必须是特定于应用程序的资源ID。在strings.xml中,您需要添加一个项目<item type="id" name="yourNameHere" />。 - Peter R

1
strings.xml中定义关键字id,然后通过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);

“Share”是我的按钮名称。

现在,您可以像这样在需要监听这些值的按钮中获取标记:

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

使用方法如下: <item type="id" name="date"/> - Asif Moin Qureshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接