从函数中更新Textview(Android)

3

有人能告诉我如何从函数中更新Android控件Textview吗?我在互联网上进行了深入搜索,看到许多人提出了同样的问题,我尝试了线程但不起作用。有人有一个简单的可行示例吗?例如调用一个函数(在循环中运行多次),并且该函数将写入TextView,但问题是在函数未完成运行之前,它不会显示文本。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    while(condition) //here freezes the UI and the text in textview only shows when the loop ends
    {
        HardWork();  
    }

}

public void HardWork() {  

    txtProgreso.append("Test Line" + "\n\n");

};

提前致谢。


你能发一些你尝试过的代码吗?我不确定我完全理解你想做什么。 - Corey Sunwold
好的,我编辑了帖子并添加了代码示例... - seba123neo
@seba123neo,请参考此链接http://stackoverflow.com/questions/6898371/update-textview-in-oncreate-android,我也遇到了同样的问题,你能帮我吗?并提供一个好的解决方案...谢谢。 - SRam
3个回答

5
如果我理解正确的话,您需要在此处使用AsyncTask,这样您就可以在onProgressUpdate方法中更新textview。
private class SomeTask extends AsyncTask<String, String, String> {
    @Override
        protected String doInBackground(String... params) {
         while(condition) {
         //do more
         publishProgress("Some text value to you textview");
        }
         return null;
     }

     @Override
     protected void onProgressUpdate(String... values) {
         txtProgreso.append(values[0]);
     }


 }

非常感谢,Labeeb P,现在一切都正常了...解决方案是AsyncTask。 - seba123neo

3
我想你想要问的是“如何在不返回控制到运行循环的情况下强制TextView显示其更新后的内容?”(即,在函数中返回)。如果是这样,那么恐怕你没有办法在Android的UI模型中实现这样的事情。最接近这个功能的可能是跟踪循环状态,并设置一个定时器来调用一个函数以更新TextView。以下是示例代码。假设您想将文本“this is a test”逐个字符地放入TextView中:

1

通过以下方式获取TextView。

TextView myTextView = (TextView)findViewById(R.id.textViewsId);

然后,您可以使用函数更改TextView。例如,您可以使用以下代码设置文本。
myTextView.setText("New text example");

你正在尝试控制的内容是否有其他更新?


谢谢,我知道这个。问题是我运行一个函数,这个函数会写几行文本到TextView中,但是当我运行这个函数时,它会冻结UI并且直到它结束后才显示文本... - seba123neo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接