2013-04-16 47 views
0
 progressDialog = ProgressDialog.show(MainActivity.this, "", "Loading..."); 
    Thread thread = new Thread() { 

     public void run() { 
      latch.countDown(); 
      try{ 
       sleep(3000);   
       } 
      catch (Exception e) {  
       Log.e("tag", e.getMessage());  
      } 

      progressDialog.dismiss(); 

     } 

    }; 
    thread.start(); listView.setAdapter(adapter); 

我想在3秒内显示加载,然后显示列表视图,但列表总是立即显示。在显示listview之前我怎样才能让线程完成?在显示内容之前显示进度对话框

+2

不要强迫用户不必要地等待3秒钟。你只是在浪费时间。如果您有加载工作要做,请使用AsyncTask正确地在后台执行此操作,并在准备就绪后立即向他们显示结果。没有理由让你浪费3秒的时间... – FoamyGuy

+0

谢谢。我知道这一点,但我有这种情况的原因:-) – vNext

+0

你是什么原因? – FoamyGuy

回答

2

你不应该让人们无缘无故等待。如果你有东西要加载,加载它。否则,在可以的时候画出你能做的。

作为对您的具体问题的回答,您需要在睡眠3秒后获得线索setAdapter(此时该呼叫不在线程中......我认为您认为该呼叫阻止了,但是这是整体在它的其他代码执行时它会自己完成)。

但是,线程不能做任何事情,你的显示线程(而不是抛出一个异常),所以你必须来包装listView.setAdapter(adapter)中的呼叫Runnable,并通过Handler从您的线程中调用它....

但不要!

+0

是的,你是对的。我们不应该让人们无所事事。但我有理由这样做:-) – vNext

+0

它与Handler一起工作。非常感谢Dredel博士。你节省了我的一天:-) – vNext

+0

不客气! :) –