用户界面非常简单,只有一个按钮login
和一个可滚动的TextView,当我按下按钮login
时,100行消息将添加到TextView中,但它们会被添加同时,因为我需要处理将添加到TextView的消息,这将花费一些时间,有时应用程序似乎没有响应。我希望消息可以逐行添加到TextView。我希望TextView在每个循环中显示添加的消息行。我怎么能意识到这一点?以下是简化的主要代码:
login.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
for(int i = 0; i < 100; i++) {
mTextView.append("test\n");
}
}
}
答案 0 :(得分:0)
login.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mTextView.setText("");
for(int i = 0; i < 100; i++) {
mTextView.setText(mTextView.getText()+"test\n");
}
}
}
尝试使用此代码
答案 1 :(得分:0)
使用此:
login.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mTextView.setText("");
if (!isStopped) {
Acitivut.this.runOnUiThread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 100; i++) {
mTextView.append("test\n");
}
isStopped=true;
}
});
}
}
}
答案 2 :(得分:0)
任何改变UI元素的东西都必须在UI线程上运行。由于您正在运行长时间循环,您的应用程序会冻结。您应该更改设计并避免在循环中更新UI,或者您可以使用运行background thread
并将文本追加到StringBuilder
,当循环结束时,将StringBuilder文本追加到mtextView。
同样,如果你的StringBuilder包含非常大的文本,那么将其更新到UI可能会再次冻结它。
答案 3 :(得分:0)
login.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
i=0;
Thread thread=new Thread(new SleepThread());
thread.start();
}
}
private class SleepThread implements Runnable
{
public void run()
{
sleep(10);
handler.sendEmptyMessage();
}
}
Handler handler=new Handler()
{
public void handleMessage(Message msg)
{
mTextView.append("test\n");
i++;
if(i<100)
{
Thread thread=new Thread(new SleepThread());
thread.start();
}
}
}