2012-07-05 3 views

답변

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

아니요, 아니요 .. –

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

이 답변은 정답이지만,'onPostExecute()'메소드 내부에서 메인 스레드에서'progDailog.dismiss();'를 실행하기 위해'AsyncTask'를 사용하는 것을 선호합니다 :) –