Android:随机和textView

时间:2012-06-26 16:35:10

标签: android textview

我刚刚开始学习Android并且遇到了一些误解。我正在尝试创建一个显示textView和按钮的应用程序。每次单击按钮都会生成一个新的随机数,该数字应显示在textView中。

但遗憾的是我的代码会导致错误列表。这是:

public class FirstAndroidProjectActivity extends Activity {

public OnClickListener listener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        TextView tv = (TextView) findViewById(R.id.display);
        Random r = new Random();
        int i = r.nextInt(101);
         tv.setText(i);

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
   Button button = (Button) findViewById(R.id.button);
   button.setOnClickListener(listener);    
    }
}

如果我不使用随机并使用除 i 之外的其他字符串 (例如 tv.setText(“99”); )一切正常,但它不能用变量作为setText()的参数。

哪里出错?

希望得到你的帮助。

6 个答案:

答案 0 :(得分:5)

在TextView

上设置文本之前,您需要将随机数转换为字符串

尝试

tv.setText(i +"");

答案 1 :(得分:2)

尝试:

tv.setText(String.valueOf(i));

答案 2 :(得分:1)

Java不会自动转换类型。当一个或多个参数是String时,+运算符被重载以将传递给它的参数转换为String。所以,当你传递i +“”到setText()时,你传递一个String,但是如果你只是传递i,那么编译器会看到你将一个int传递给一个需要一个String的方法,让你知道那个不能完成。

答案 3 :(得分:0)

我是一个int,试试tv.setText(“”+ i);

答案 4 :(得分:0)

在将整数设置为textView之前将其转换为String。您还应该在方法之外移动Random r = new Random();,否则您的数字可能不是随机的:

Random r = new Random();

@Override
public void onClick(View v) {
    TextView tv = (TextView) findViewById(R.id.display);
    int i = r.nextInt(101);
    tv.setText(Integer.toString(i));
}

来自文档:

  

如果使用相同的种子创建了两个Random实例,并且为每个实例创建了相同的方法调用序列,则它们将生成并返回相同的数字序列

如果您过快地创建了两个Random个对象(例如用户非常快速地点击按钮两次),它们将共享相同的种子(系统时钟用于生成它)并因此你会得到两次相同的号码。

通过在全局变量中只创建一个Random实例,可以避免此问题。

答案 5 :(得分:0)

使用

tv.setText(new Integer(i).toString()) ;