没有用线程更新TextView值,为什么




TextView output;
int i;
Random random=new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
output=findViewById(R.id.textView);
new Thread(new mythread()).start();
}
class mythread implements Runnable{
@Override
public void run() {
try {
while(true) {
i = random.nextInt(100);
output.setText(i + "");
Thread.sleep(500);
}
}catch (Exception e){}
}
}
}

它只是在文本视图中显示一个数字但要求是,它应该生成随机数,并在500ms后保持更新文本视图非常感谢。

代码中的主要问题是,您只能在主线程中更新UI,而您使用的是自定义线程。

第二个问题是你正在使用Thread.sleep,这是一种非常糟糕的做法。

我建议你使用汉德勒

Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
Log.d("Handler", "Running Handler");
handler.postDelayed(this, 500);
}
}
handler.postDelayed(runnable, 0);

这里是科特林版

var handler = Handler()
var runnable = object : Runnable {
override fun run() {
Log.d("Handler", "Running Handler");
handler.postDelayed(this, 500)
}
}
handler.postDelayed(runnable, 500)

试试这个,我认为它会解决你的问题。

public class MainActivity extends AppCompatActivity {
private Random random;
private Handler handler;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.tv_number);
displayRandomNumber();
}
/**
* Display random number in text view
*/
private void displayRandomNumber()
{
random = new Random();
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
int value = random.nextInt();
textView.setText(String.valueOf(value));
handler.postDelayed(this,2000);
}
}, 2000);
}
}

最新更新