我对Android
很新。我之前使用过Java
但不是大约一年半。我在更新屏幕时遇到问题,或者更确切地说是TextView
。我已经在网上寻找了几个小时的解决方案,我有点知道为什么它不起作用,但我不知道如何解决它。
public class PreliminaryActivity extends Activity {
//private static final int MENU_QUIT = Menu.FIRST;
int i = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getWindow().setBackgroundDrawableResource(R.drawable.background);
mainComputations();
}
public void mainComputations(){
runOnUiThread(new Runnable(){
//@Override
public void run(){
TextView tv = (TextView) findViewById(R.id.time_display);
tv.setText(new Integer(i).toString());
i++;
}
});
}
我已经减少了我的程序,所以它应该只是在屏幕上增加一个int值进行测试,它仍然无法正常工作。相反,它只显示'0'。如果我在runOnUiThread()
方法之前添加for循环,它将增加i值,但我感觉它只是增加值然后显示它而不是实时更新。任何帮助将不胜感激。
答案 0 :(得分:2)
转到TextSwitcher
如果您希望textview更新一些延迟。 使用这样的东西。
final int length = 10;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0 ; i<length; i++) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(new Integer(i).toString());
}
}) ;
i++;
Thread.sleep(500);
}
}
});
t.start();
答案 1 :(得分:0)
在android中,您无法从其他线程更新UI。这是android开发中的限制(我认为这是消除不必要的错误的一个特性)。你可以使用AsyncTask ......
在使用中,您可以在donInBackground()中执行长任务,并且可以使用onProgressUpdate()更新UI ...请参阅AsyncTask示例here
修改强>
请参阅this类似问题以获取更多信息......
答案 2 :(得分:0)
您的问题是因为您只拨打一次mainComputations()
。您应该查看AsyncTask
和Android开发人员资源Updating the UI from a Timer
答案 3 :(得分:0)
您无法从另一个线程更新主UI线程,因为您需要使用Handler。有关详细信息,请参阅此链接
http://www.vogella.com/articles/AndroidPerformance/article.html
答案 4 :(得分:0)
我看到的是你只调用一次mainComputations,所以它是0。