2014-05-15 2 views
1

사용자 지정 DialogFragment가 있습니다. 내 활동을 전환하는 동안이 대화 상자를 표시하고 싶습니다.한 활동에서 다른 활동으로 전환하는 동안 진행 대화 상자 만들기

시나리오 : - 1) 나는 대화를 시작합니다. 2) asynctask 클래스를 시작하십시오. 3) doInBackground()에서 일부 인증을 수행하십시오. 4) onPostExecute()에서 새로운 활력을 시작하십시오.

문제 : -

대화 상자가 asynctask 전에 중지됩니다. 여기

내 코드입니다 : -

myWebView.setWebViewClient(new WebViewClient() 
     { 


     @Override 
      public void onPageStarted(WebView view, String url, 
        Bitmap favicon) 
      { 
       // TODO Auto-generated method stub 
       super.onPageStarted(view, url, favicon); 
       redirected =view.getUrl(); 
       redirected= Uri.decode(redirected); 

       if(redirected!=null && redirected.contains(string1)) 
       { 

        myprogressDialog.show(getFragmentManager(), "Wait"); 
       } 



      } 

      @Override 
      public void onPageFinished(WebView view, String url) 
      { 
       // TODO Auto-generated method stub 
       super.onPageFinished(view, url); 


       if(redirected!=null && redirected.contains(mystring)) 
       { 


        myWebView.stopLoading(); 

        String authorizationContentString = myurl 


        new Authentication(Activity2.this, myprogressDialog, url).execute(authorizationString); 


       } 

private static class ProgressDialogFragment extends DialogFragment 
     { 
      public static ProgressDialogFragment newInstance() 
       { 
        return new ProgressDialogFragment(); 
       } 

       @Override 
       public void onCreate(Bundle savedInstanceState) 
       { 
        super.onCreate(savedInstanceState); 
        setStyle(STYLE_NO_FRAME, android.R.style.Theme_Translucent); 
       } 

       @Override 
       public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
       { 
        return inflater.inflate(R.layout.fragment_dialog_progress, container, false); 
       } 
     } 

Authentication.java

@Override 
protected void onPreExecute() 
{ 
    // TODO Auto-generated method stub 

    super.onPreExecute(); 

    /* progDia.show(man, "wait"); 
     progDia= new Utility.ProgressDialogFragment().newInstance();*/ 

} 

public AuthenticateDevice(Details1 myContext, ProgressDialogFragment myprogressDialog, String Url) 
{ 
    // TODO Auto-generated constructor stub 
    mContext = myContext; 
    this.progDia = myprogressDialog; 
    this.Url = Url; 
    this.mActivity = myContext; 
} 

@Override 
protected Void doInBackground(String... params) 
{ 
    // TODO Auto-generated method stub 
    //Some authentication 
      return null; 
} 

@Override 
protected void onPostExecute(Void result) 
{ 
    // TODO Auto-generated method stub 
    super.onPostExecute(result); 

    if(progDia!=null&&progDia.isVisible()) 
    { 
     progDia.dismiss(); 
    } 
    Intent myIntent = new Intent(mContext, Activity2.class); 





    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    mContext.startActivity(myIntent); 
    mActivity.finish(); 
} 
+0

왜 'onPreExecute'에서 진행 대화 상자를 만들고'onPostExecute'에서 닫지 않습니까? – Aniruddha

+0

위의 설명은 의미가 있습니다! 또는 progressBar.show()를 onPageStarted() 전에 호출 해보십시오. 이상적으로 작동해야합니다. –

+0

@stack_ved URL이 특정 URL로 리디렉션 될 때 실제로 진행 대화 상자를 표시하려고합니다. 이 잘 작동합니다. 그러나 새로운 활동이 시작될 때 – user2625086

답변

0

내가 그것을 다시 시도

ProgressDialog pd; 

class MYAsync extends AsyncTask<Void , Void, String>{ 

     @Override 
     protected void onPreExecute() {    
      // pd.setTitle("Please Wait"); 
      pd.setMessage("Working..."); 
      pd.setCancelable(false); 
      pd.setIndeterminate(true); 
      pd.show(); 
     } 
     @Override 
     protected String doInBackground(Void... params) { 
      // TODO Auto-generated method stub 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String sResponse) { 
      pd.dismiss(); 
      pd.cancel(); 


      } 
     } 
    } 
+0

Asynctask 전에 progressdialog를 시작하고 싶습니다. 즉 asynctask를 호출하고 새로운 활동이 시작된 후에 종료하십시오. – user2625086

+0

progressdialog 후에 수행 할 다른 작업을 수행하십시오. –

+0

두 번째 활동이 시작된 후에 수행 할 수 있지만 가능하면 더러워집니다. ProgressDialogFragment에 현재 활동의 참조를 전달하여 모든 시점에서 유효한 부모를 갖도록합니다. –

0

비동기에서 진행 대화 상자를 표시하는 코드를 다음 시도, 그것은 잘 작동하는 것 같습니다. 이 아래의 방법에는 귀하의 행동을 설명하는 주석이 있습니다.

private void myWOrk() { 

    try { 

     final ProgressDialog Dialog = new ProgressDialog(this); 
     Dialog.setMessage("Loading route..."); 
     Dialog.show(); 

     Thread.sleep(2000);// load url and redirect 
     //Toast.makeText(LoginActivity.this, "redirect caught", Toast.LENGTH_SHORT).show(); 

     new AsyncTask<Object, Object, Object>() { 

      protected String doInBackground(Object... params) { 
       try { 
        Thread.sleep(2000);// authenticate 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 

      protected void onPostExecute(Object result) { 

       Toast.makeText(LoginActivity.this, "onPostExecute", Toast.LENGTH_SHORT).show(); 
       try { 
        Thread.sleep(2000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       Dialog.dismiss();// start your new activity here 

      }; 

     }.execute(null, null, null); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

}`