3

我很陌生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”。如果我在方法之前添加一个 for 循环runOnUiThread(),它会增加 i 值,但我觉得它只是增加值然后显示它而不是实时更新。任何帮助将不胜感激。

4

5 回答 5

2

去 TextSwitcher

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.html

如果您希望您的 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();
于 2012-05-02T12:23:48.107 回答
0

在 android 中,您不能从另一个线程更新 UI。这是 android 开发中的限制(我认为这是删除不必要的错误的功能)。您可以为此使用 AsyncTask ...

在使用中,您可以在 donInBackground() 中执行长任务,然后可以使用 onProgressUpdate() 更新 UI ...请参阅此处的 AsyncTask 示例

编辑

有关更多信息,请参阅类似问题...

于 2012-05-02T12:24:39.740 回答
0

你的问题是因为你mainComputations()只打电话一次。你应该看看AsyncTaskAndroid 开发者资源Updating UI from a Timer

于 2012-05-02T12:24:46.683 回答
0

您无法从另一个线程更新主 UI 线程,因为您需要使用 Handler。请参阅此链接以获取更多详细信息

http://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-05-02T12:25:14.077 回答
0

我看到的是你只调用了一次 mainComputations,所以它是 0。

于 2012-05-02T12:26:30.453 回答