【问题标题】:How to set multiple tags to a button?如何为一个按钮设置多个标签?
【发布时间】:2017-10-31 15:43:08
【问题描述】:

我有 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);

【问题讨论】:

    标签: java android


    【解决方案1】:

    如果您需要在一个视图中添加多个标签,那么您必须为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);
    

    【讨论】:

    • 这节省了我的时间。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,但是当我有 public MyStruct (String lab, String t) 之类的东西时如何在我的代码中实现它,稍后你可以看到我是如何使用它的?
    • 对不起,我只能给你提示和建议。我不能为你实现这个。
    • 我已经在我的第一篇文章中添加了一些代码,你能至少检查一下是否可以吗?
    • 这会抛出非法参数异常。
    • 键必须是特定于应用程序的资源 id
    【解决方案3】:

    试试:

    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);
    

    但是,这将只返回对象。您需要对其进行类型转换。

    【讨论】:

    • 非法参数异常
    • 当你得到异常,同时设置或获取
    • 键必须是特定于应用程序的资源 id。一个视图只能有一个标签!
    • 不起作用。键必须是特定于应用程序的资源 ID。在 strings.xml 中,您需要添加一项
    【解决方案4】:

    strings.xml中定义key 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);
    

    分享是我的按钮名称

    现在终于在按钮中获取您想要这些值监听器的标签,如下所示:

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

    【讨论】:

    • 这样使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2022-01-17
    • 2014-12-05
    • 2017-02-10
    • 2012-12-08
    • 2011-11-12
    相关资源
    最近更新 更多