0

setTag我已经在和上检查了其他问题getTag,但我不明白。我在这里设置标签

   buttonA.setOnClickListener(new View.OnClickListener() {

        public int GetRandomNumber(int max) {
            int min;
            min = 1;
            int num = min + (int) (Math.random() * ((max - min) + 1));

            return num;
        }

        int RandomIndex;
        public void onClick(View view) {

            int countMax = 40;
            RandomIndex = GetRandomNumber(countMax);


            view.setTag(RandomIndex);


       }

    });

并在这里获取标签

buttonB.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub        
                int Index = (Integer)(view.getTag());
                tv1.setText(Index);                    
            }
        });

我收到NullPointerException错误,因此我没有setTag正确使用..这发生在 1 个活动中。

4

3 回答 3

4

setTag()在单个View对象上,存储一些与该对象相关的信息View

View.setTag(对象标签)

在您的示例中,您正在设置 Tag ofButtonA然后调用 getTag on ButtonB。当然它是空的,你从来没有在ButtonB.

View中的是onClickView正在单击的。在这种情况下,您设置在一个视图上并从另一个视图获取。它将始终为空。

编辑:我认为出于您的目的,只需使用类变量来存储和检索您想要的内容。getTag()不是视图之间的某种神奇的交流形式:)

于 2013-06-18T14:02:43.867 回答
1

您正在尝试使用整数值调用 setText。通过这样做,android 认为您想要提供一个 ressource-ID(例如 R.string.mytext,它是您的 R-Class 中的整数值)。Android/Java 无法决定您是要显示数字还是资源字符串。
只需将其更改为 tv1.setText("" + Index);,您的整数将作为字符串传递给 setText()-Method。

于 2013-06-18T13:55:00.630 回答
0

Ken Wolf 的回答告诉你为什么它不起作用。要修复它,您可以简单地将该变量设置为成员变量,以便可以在您的任何地方访问它Activity

public class YourClass extends Activity
{
     int RandomIndex;   // initialize variable here

     public void onCreate(...)
     {
          ...
     }

buttonA.setOnClickListener(new View.OnClickListener() {

    public int GetRandomNumber(int max) {
        int min;
        min = 1;
        int num = min + (int) (Math.random() * ((max - min) + 1));

        return num;
    }

    public void onClick(View view) {

        int countMax = 40;
        RandomIndex = GetRandomNumber(countMax);   // set value here
   }

});

并在此处使用该值

buttonB.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            // TODO Auto-generated method stub        
            tv1.setText(String.valueOf(RandomIndex));   // use value here                 
        }
    });

此外,为了符合 Java 命名约定,您应该对变量使用混合大小写,RandomIndex因此randomIndex. 这只是一个建议,如果您与其他开发人员一起工作或当人们查看您的代码以帮助您时,它可能会使生活更轻松。

于 2013-06-18T14:08:01.127 回答