public class LogoActivity extends Activity {
    /** Called when the activity is first created. */
Element el = new Element(this);
TextView txtTextView = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.logo);
        txtTextView = el.TextView(R.id.test);
        txtTextView.setText("tttt");//这个可以
        Util.setTimeout(new Runnable() {
public void run() {
// TODO Auto-generated method stub
setText("fdsafdsa"); //这个就不行了..不明白为什么啊
Util.log("-------> " + txtTextView.getText().toString()); //这个也显示
}
}, 3000);
    }
    
    public void setText(String txt){
     txtTextView.setText(txt);
    }
//下面是setTimeout的实现    public static Timer setTimeout(final Runnable obj, long delay){
final Timer t = new Timer();
t.schedule(new TimerTask(){
public void run() {
obj.run();
t.cancel();
}
}, delay);
return t;
    }
日志也输出了,可是界面没变化 为什么啊, java看来比js要麻烦多了啊....

解决方案 »

  1.   

    更新ui必须在主线程哦。。可以修改下你的代码
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.logo);
            txtTextView = el.TextView(R.id.test);
            txtTextView.setText("tttt");//这个可以
            Util.setTimeout(new Runnable() {
                public void run() {
                    // TODO Auto-generated method stub
                runOnUiThread(new Runnable() {
    public void run() {
      setText("fdsafdsa");

    });
      
                    Util.log("-------> " + txtTextView.getText().toString()); //这个也显示
                }
            }, 3000);
        }
      

  2.   


    这个runOnUiThread方法里面怎么实现才能调用到UI线程啊?
    原来timer也是用线程做的啊 我还以为和js里面的一样呢....在线程中操作UI的话java也应该有backgroundWorker的东西吧?
      

  3.   

    请用消息机制,这么好的东东一定要用啊。
    先定义一个 private Handler handler = new Handler()
    {
    public void handleMessage( Message msg )
    {
    int what = msg.what;
    switch( what )
    {
    case 1 :
    setText("fdsafdsa");
    break;
    default :
    break;
    }

    }
    };
     然后再run里面发送消息:Message m = new Message();
    m.what=1;
    handler.sendMessage( message );
      

  4.   


    这不是主线程吧。而是另外开了一个线程吧?在计时器里又开了个线程?推荐用消息方式Message m = new Message();发送。
      

  5.   

    呵呵,是的,Android的UI操作都是放在主线程里做的Android里有更好的定时器(消息处理)Handler类,很容易满足你的需求
      

  6.   

    可以去看看runOnUiThread的实现 呵呵。。
      

  7.   

    四中选择。。
    1.Activity.runOnUIThread(Runnable)
     2.View.post(Runnable),View.postDelay(Runnable,long)
     3、Handler
     4、AsyncTask
      

  8.   

    android只能在UI线程中(即主线程)才能更新UI,LZ的定时器并不是UI线程,如果想用定时器控制UI更新的话,应该在定时器中使用handle发送消息,在UI线程中接受消息并作更新操作即可!LZ如果需要了解异步线程相关操作的话,可以参见http://blog.csdn.net/zj_1395201/article/details/6441927,很详细的例子!
      

  9.   

    看看sdk文档吧。更新ui的三种方法
    Activity.runOnUiThread(Runnable)
    View.post(Runnable)
    View.postDelayed(Runnable, long)
      

  10.   

    View.post系列方法最常用,建议楼主采用这样的方式更新UI。
      

  11.   

    http://blog.csdn.net/ch_984326013/article/details/6704616