我仍然没有得到setTag和getTag如何工作

时间:2013-06-18 13:50:22

标签: java android nullpointerexception

我已在setTaggetTag上查看了其他问题,但我没有得到。 我在这里设置标签

   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活动中。

3 个答案:

答案 0 :(得分:4)

setTag()View个对象上的View,用于存储与ButtonA

相关的一些信息

View.setTag(Object tag)

在您的示例中,您设置的标记为ButtonB,然后在ButtonB上调用getTag。当然它是空的,你永远不会在View上设置标签。

onClick中的View是您点击的getTag()。在这种情况下,您将设置一个视图并从另一个视图获取。它将永远为空。

编辑:我认为出于您的目的,只需使用类变量来存储和检索您想要的内容。 {{1}}不是观点之间的一种神奇的沟通方式:)

答案 1 :(得分:1)

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

答案 2 :(得分: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命名约定,您应该对变量使用混合大小写,以便RandomIndexrandomIndex。这只是一个建议,如果您与其他开发人员合作,或者当人们正在查看您的代码来帮助您时,可能会让生活更轻松。