TextView 没有更新

TextView is not updating

我正在尝试生成随机数。为此, 我从编辑文本中获取文本并将其传递给 Random class 的 nextInt。但我有一个问题。我的 textView 没有改变。 这是代码:

    package random.vivek.com.random;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.EditText;
import android.widget.TextView;

/**
 * Created by Shiva on 09-08-2015.
 */
public class Random extends AppCompatActivity  {

    int number , i ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        java.util.Random genertor = new java.util.Random();
        EditText editText = (EditText) findViewById(R.id.random);
        TextView textView = (TextView) findViewById(R.id.text);


        String s = editText.getText().toString();
        try {
            i = Integer.parseInt(s);
            for (int roll = 0; roll < 20; roll++) {
                number = genertor.nextInt(i);
            }


        } catch (NumberFormatException e) {
            e.printStackTrace();

    }






        textView.setText(number + "");
    }
}

尝试:

try {
            i = Integer.parseInt(s);
            for (int roll = 0; roll < 20; roll++) {
                number = genertor.nextInt(i);
                textView.setText(number);
            }


        } catch (NumberFormatException e) {
            e.printStackTrace();

onCreate 方法:

首先,您在 onCreate 方法中编写此代码。 onCreate 是大多数初始化内容所在的方法。

因此,当创建视图时,编辑文本中没有任何内容,因此您在文本视图中什么也得不到。相反,您应该在单击某个按钮或编辑文本中的文本更改时执行此操作,以使其更具动态性。

响应编辑文本更改:

要对 edittext 文本更改执行一些操作,请使用文本观察器,如下所示:

editText.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {
        String s = editText.getText().toString();
        try {
            i = Integer.parseInt(s);
            for (int roll = 0; roll < 20; roll++) {
              number = genertor.nextInt(i);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){}
}); 
    String s = editText.getText().toString();
    try {
        i = Integer.parseInt(s);
        for (int roll = 0; roll < 20; roll++) {
            number = genertor.nextInt(i);
            textView.setText(String.ValueOf()number);
            // But this will also keep continuing through the loop and change the text quickly.
        }

如果要附加值:

String s = editText.getText().toString();
    try {
        i = Integer.parseInt(s);
        for (int roll = 0; roll < 20; roll++) {
            number = genertor.nextInt(i);
            textView.append(String.ValueOf()number + " ");

同样,您的 textView.setText(number + ""); +"" 什么都不做。

如果您希望在更改 textView 的文本之间有时间延迟,则需要更改算法。

您需要在代码中使用 textView.setText(Integer.toString(number)) 来设置文本视图

您将所有代码都放在 onCreate 方法中,这是错误的。 onCreate 方法在 activity 启动时被调用。你应该在你的应用程序中添加一个按钮或其他东西,这样当用户按下按钮时,就会生成一个随机数。我觉得你有这个能力,所以我就不在这里展示了。

在按钮的点击监听器中,编写上面的代码:

public void buttonOnClick (查看视图) { java.util.Random 发电机 = 新 java.util.Random(); EditText editText = (EditText) findViewById(R.id.random); TextView textView = (TextView) findViewById(R.id.text);

String s = editText.getText().toString();
try {
    i = Integer.parseInt(s);
    for (int roll = 0; roll < 20; roll++) {
       number = genertor.nextInt(i);
    }
    textView.setText (Integer.toString(number));

} catch (NumberFormatException e) {
   e.printStackTrace();

}