0

하나의 TextView가있는 ProgressBar 만 포함하는 대화 상자 활동이 있습니다. 그 활동의 코드는 다음과 같습니다대화 상자의 테마 활동을 닫는 방법

public class ProgressDialog extends Activity{ 

TextView msg; 
ProgressBar progressBar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

    setContentView(R.layout.progress_dialog); 

    msg = (TextView)findViewById(R.id.progressMsg); 
    progressBar = (ProgressBar)findViewById(R.id.progressBar); 
    Intent intent = getIntent(); 
    String msgString = intent.getStringExtra("msg"); 
    msg.setText(msgString); 

} 

} 

이 내가 안드로이드의 모든 버전에 같은 모양과 쉽게 costumizable 대화를 가질 수 있도록 내 프로젝트에 사용하는 ProgressBar의 대화를 나타냅니다.

문제는 onPreExecute() 방법으로 정상 활동으로 시작하면 AsyncTask onPostExecute() 방법으로이 활동을 완료 할 수 있습니다. AsyncTask는 다른 Activity에서 호출됩니다. 나는 여러 가지 일을 시도했지만 성공하지 못했습니다. 나는 시도 :

  • 이 도와주세요

활동의 마무리() 메소드를 호출하는 활동의 공개 방법을 구현 fragmentManager 및 activityManager

  • 를 사용하여 다시 버튼을 누르면
  • 시뮬레이션! 추가 코드가 필요한 경우 알려주십시오!

    감사합니다.

    @Override 
    protected void onNewIntent(Intent intent) { 
        super.onNewIntent(intent); 
    
        if (ACTION_CLOSE_DIALOG.equals(intent.getAction())){ 
         finish(); 
        } 
    } 
    

    당신은을 중지 할 수 있습니다

    private void removeDialog() { 
        Intent removeDialogIntent = new Intent(this, ProgressDialogActivity.class).setAction(ACTION_CLOSE_DIALOG); 
        startActivity(removeDialogIntent); 
    } 
    

    그리고 progressDialogActivity에서

    그것을 처리해야합니다 :

  • +0

    asynctask의 onpostexecute에서 finish()가 작동하지 않습니까? –

    +0

    아니요.이를 수행하려면 실행중인 대화 상자 테마 활동의 인스턴스가 필요합니다. 이것이 주요한 문제입니다. – Aksiom

    답변

    1

    대화 상자를 제거하기 위해 호출 활동이 라인을 따라하는 방법을 쓰기 호출 서비스 또는 기타 컨텍스트에서 활동을 추적하려면 인 텐트에 관련 플래그를 추가하기 만하면됩니다.

    개인적으로 나는 DialogFramgent를 사용하여이 모든 혼란을 피할 수 있습니다. 대화 활동이 필요한 이유는 무엇입니까?

    +0

    감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. – Aksiom

    +0

    그냥 알려주십시오. 이것은 올바른 방법이지만 launchMode를 매니페스트의 활동 중 SingleTop으로 설정해야합니다. 그렇지 않으면 새로운 의도로 대화 상자가 다시 열립니다. 자세한 내용은이 답변을보십시오 : http://stackoverflow.com/a/14411650/1425032 – Aksiom

    0

    AsyncTask를 사용하는 경우 ProgressDialog을 AsyncTask onPreExecute에서 시작하지 않으시겠습니까? 때를 해제 한 후 실행이 활동에서 보여주고 싶은 경우에, 어쩌면 당신은 그냥

    progressBar.show(); 
    

    를 사용한다, 또는

    private class BackgroundTask extends AsyncTask <Void, Void, Void> { 
        private ProgressDialog dialog; 
    
        public RecordAndAlignTask(MyMainActivity activity) { 
         dialog = new ProgressDialog(activity); 
        } 
    
        @Override 
        protected void onPreExecute() { 
         dialog.setMessage("Doing something, please wait."); 
         dialog.show(); 
        } 
    
        @Override 
        protected void onPostExecute(Void result) { 
         if (dialog.isShowing()) { 
          dialog.dismiss(); 
         } 
        } 
    

    과 :

    어쩌면 당신은 이런 식으로 뭔가를 시도 할 수 있습니다 로드가 완료되었습니다.

    if (dialog.isShowing()) { 
          dialog.dismiss(); 
         } 
    

    See tutorial.

    +0

    죄송합니다 이것은 기본 ProgressDialog입니다. 기본 대화 상자를 사용할 수 없습니다. 어쨌든 고맙습니다. – Aksiom