代码之家  ›  专栏  ›  技术社区  ›  Christian

在Android中更新TextView

  •  2
  • Christian  · 技术社区  · 14 年前
    view.setText("hello");
    wait(1000);
    view.setText("world");
    

    当我调用上面的函数时,视图根本不显示“hello”。文本仅在完成功能后更新。我要打什么电话才能看到“你好”?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Brian ONeil    14 年前

    问题是您正在更新阻止UI线程的UI,然后再次更新它。你不应该让UI线程休眠,这是一种不好的做法,用户不会喜欢它的。

    线程可以解决这个问题,但您在这里所做的工作实际上不需要线程(而且,您不应该从后台线程更新UI,您需要使用处理程序发送消息)。

    您应该单独使用处理程序来执行这种简单的更新,因为它在应用程序中不使用额外的线程。您可以对它使用postdelated方法,让它在特定时间内回调到您的UI线程。

    本文 http://developer.android.com/resources/articles/timed-ui-updates.html 涵盖了实现定时UI更新,而且非常直接。

    要转换示例:

    //member variable
    private Handler mHandler = new Handler();
    
    //In your current Method
    view.setText("hello"); 
    mHandler.postDelayed(mUpdateTimeTask, 1000);
    
    //Member variable
    private Runnable mUpdateTimeTask = new Runnable() {
       public void run() {
          view.setText("world");      
       }
    };
    
        2
  •  1
  •   Tim seongjoo    12 年前

    我在developer center上找到了此代码,运行良好:

    view.setText("hello");
    new CountDownTimer(1000, 100) {
        TextView view = (TextView) findViewById(R.id.view);
    
        public void onTick(long millisUntilFinished) { }
    
        public void onFinish() {         
            view.setText("World!")
        }
    }.start();
    
        3
  •  0
  •   Jason Rogers    14 年前

    我想我知道你的问题是什么。

    修改UI对象时,它会更改其状态,但不会直接更改屏幕。每个系统的工作方式略有不同,但基本逻辑是相同的

    主回路:

    1)元素的修改 2)刷新屏幕。

    这里发生的是 修改为hello 等待 修改为世界 刷新。

    您让主线程等待,但在这段时间内接口从不刷新

    要解决这个问题,有几种方法:

    -执行修改,以便等待不会影响显示 有点像

    new Thread(new Runnable(){
        public void run(){
            wait(1000);
            view.setText();
        }
    }
    
    • 使视图无效。这是一种向显示器发出信号的方式,表示某个东西发生了变化,需要重新绘制。