我已在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活动中。
答案 0 :(得分:4)
您setTag()
个View
个对象上的View
,用于存储与ButtonA
在您的示例中,您设置的标记为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命名约定,您应该对变量使用混合大小写,以便RandomIndex
为randomIndex
。这只是一个建议,如果您与其他开发人员合作,或者当人们正在查看您的代码来帮助您时,可能会让生活更轻松。