2017-02-08 8 views
-3

Android開発の新機能です。私はProgressDialogを表示しようとしています。ダイアログを表示するにはスレッドを使用する必要があると言うチュートリアルがたくさんあります。スニペットコードはスレッドを使用しています。スレッドを使用してもProgressDialogが機能しません

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     try { 
      refreshFromFeed(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     setContentView(R.layout.activity_main); 
    } 

private void refreshFromFeed() throws InterruptedException { 
     ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 
     Thread th = new Thread(){ 
      public void run(){ 
       Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Log.d("TimeTo", String.valueOf(System.currentTimeMillis()/1000)); 
      } 
     }; 
     th.start(); 
     dialog.dismiss(); 
    } 
protected void onRefresh(View view) throws InterruptedException { 
     refreshFromFeed(); 
    } 

ログには5秒かかりますが、画面上にダイアログが表示されず、画面上で何もできます。私は物理的なデバイスでも使用します。私はデバッグモードを使用しました。例外はありません。

onRefreshそれのXMLで宣言onClickによってイベントです。

答えて

0

あなたのコードを少し変更しましたが、注意深く読んでいます。

private void refreshFromFeed() throws InterruptedException { 
    ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 
    Thread th = new Thread(){ 
     public void run(){ 
      Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
      try { 
       Thread.sleep(5000); 
       dialog.dismiss(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      Log.d("TimeTo",String.valueOf(System.currentTimeMillis()/1000)); 
     } 
    }; 
    th.start(); 

} 
+0

あなたの権利があります。私はdismiss()メソッドを変更する必要があります。しかし、それは再び動作しません:( –

+1

add dialog.show();脅威の後th –

+0

ありがとう、それは非常にうまくいきます –

0

あなたはダイアログを表示した直後にそのダイアログを閉じます。 「dialog.dismiss();」を移動したいかもしれません。スレッドの内側に移動します。それ以外の場合は、あなたのアプリケーションがクラッシュします、あなたはUIスレッド上でダイアログを閉じする必要があることを忘れないでください:

private void refreshFromFeed() throws InterruptedException { 
     final ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 
     Thread th = new Thread(){ 
      public void run(){ 
       Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Log.d("TimeTo", String.valueOf(System.currentTimeMillis()/1000)); 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         dialog.dismiss(); 
        } 
       }); 
      } 
     }; 
     th.start(); 
    } 

私は、スレッドを使用する必要がありますダイアログを示すために言うチュートリアルの多くを参照してください。

あなたが明示的にProgressDialogを表示するためのスレッドを必要としない、これはあなたがまだあなたのUIスレッドでProgressDialogを実行して5000ミリ秒

0
private void refreshFromFeed() throws InterruptedException { 
     final ProgressDialog dialog = ProgressDialog.show(getActivity(),"Loading","Wake up after some sleep"); 
     Thread th = new Thread() { 
      public void run() { 
       Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
       try { 
        Thread.sleep(5000); 
        dialog.dismiss(); // dismiss your dialog here 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Log.d("TimeTo", String.valueOf(System.currentTimeMillis()/1000)); 
      } 
     }; 
     th.start(); 
    } 
+0

それは動作しませんでした:( –

0

後にそれを却下する一例に過ぎません。

ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 

この行の後に、新しい行が作成されます。

関連する問題