2012-07-05 31 views
-3

在我的 「OnClickListener」 中的 「ProgressDialog」 沒有出現(下面的代碼):OnClickListener和ProgressDialog

Button suchenbutton = (Button) findViewById(R.id.suchen); 
    suchenbutton.setOnClickListener(new View.OnClickListener() { 
     //TODO 
     public void onClick(View v) { 

      ProgressDialog dialog= ProgressDialog.show(TankFinderActivity.this, "", 
       "Loading. Please wait...", true); 
      InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(filterTextSSD.getWindowToken(), 0); 
      loadsuchen(); 

      dialog.dismiss(); 

     } 

    }); 

我做了什麼錯?

+1

您需要一些基本的編程技巧:)使用異步任務來達到您想要的效果。 – 2012-07-05 11:19:28

回答

4

看來loadsuchen()是一個在主線程上運行的沉重方法。使用AsyncTask運行該方法在一個單獨的線程,並在結束通話dialog.dismiss()

@Override 
public void onClick(View arg0) 
{ 
    final ProgressDialog dialog = ProgressDialog.show(TankFinderActivity.this, "", "Loading. Please wait...", true); 
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(filterTextSSD.getWindowToken(), 0); 

    new AsyncTask<Void, Void, Void>() 
    { 
     @Override 
     protected Void doInBackground(Void... params) 
     { 
      loadsuchen(); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) 
     { 
      dialog.dismiss(); 
     } 
    }.execute(); 
} 
1

它,因爲你是顯示並儘快駁回對button.it的相同的點擊事件,對話框將關閉該對話框對話框出現。更改代碼並嘗試在其他地方保留dialog.dismiss()。

+1

不,它不是.. – 2012-07-05 11:25:35

1

按鈕點擊

Button click = (Button) findViewById(R.id.button1); 
     click.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       openprogresdialog(); 
      } 
     }); 

創建此方法。

private void openprogresdialog() { 
     // TODO Auto-generated method stub 
     final ProgressDialog progDailog = ProgressDialog.show(
       HidekeybordActivity.this, "Testing", "Please wait...", true); 

     new Thread() { 
      public void run() { 
       try { 
        // Some code........ 
       } catch (Exception e) { 
       } 
       progDailog.dismiss(); 
      } 
     }.start(); 
    } 
+0

這是一個正確的答案,但我更傾向於使用'AsyncTask'來使'progDailog.dismiss();'在onPostExecute()方法內部的主線程上運行:) – 2012-07-05 11:44:09