2010-11-26 88 views
3

有人可以告诉我如何从功能更新控件Textview Android?我深入网络搜索,看到很多人问同样的问题,我测试了线程,但无法工作,有人有一个简单的工作例子,这样做?例如调用一个函数(它在循环中运行多次),并且函数在TextView中写入,但问题是,直到函数未完成运行,它才会显示文本。从功能更新Textview Android

@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"); 

}; 

在此先感谢。

+0

你可以发布你尝试一些代码?我不确定我是否明白你想要做什么。 – 2010-11-26 01:52:34

+0

好吧,我编辑了帖子,并添加了代码示例... – seba123neo 2010-11-26 02:52:48

+0

@ seba123neo请参考此链接http://stackoverflow.com/questions/6898371/update-textview-in-oncreate-android我也面临同样的问题你能帮我请...并提供给我很好的解决方案...谢谢 – SRam 2011-08-02 05:23:29

回答

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]); 
    } 


} 
1

通过执行以下操作获取textview。

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

然后,您可以使用函数更改TextView。例如,您可以使用以下代码设置文本。

myTextView.setText("New text example"); 

是否有任何其他更新您正在尝试执行的控件?

3

我想你想问的是“如何强制我的TextView显示其更新的内容,而不会将控制权返回给runloop?” (即退出你的功能)。

如果是这样,恐怕你运气不好,这样的事情是不可能与Android的UI模型。最接近这一点的是可以跟踪你的循环状态,并设置一个计时器来调用一个函数来更新TextView。

下面是一个例子。假设你希望把文本“这是测试”到一个TextView,每次一个字符:

 
private Handler mHandler = new Handler(); 
private String desiredText = new String("This is a test"); 

private Runnable mUpdateTextView = new Runnable() { 
    public void run() { 
    TextView textView = (TextView)findViewById(R.id.myTextView); 
    int lengthSoFar = textView.getText().length(); 
    if (lengthSoFar < desiredText.length()) { 
     mTextView.setText(desiredText.substring(0, lengthSoFar + 1)); 
     mHandler.postDelayed(100, mUpdateTextView); 
    } 
    } 
}; 

protected void onStart() { 
    mHandler.postDelayed(100, mUpdateTextView); 
} 

我想我的一些对象的可视化是不正确这里,我没有一个Android环境方便测试,但您可以了解一般想法。你可以使用定时器,而不是一个处理程序,但它有点重量级,所以它取决于你想要更新UI的频率。