2010-06-25 2 views
13

이것은 Android와 관련된 문제인 것 같습니다. API 데모에서보기 -> 진행률 막대 -> 대화 상자를 볼 수 있습니다.Android : 진행 대화 상자 회 전자 회전 안 함

기본적으로 진행률 대화 상자를 표시하면 처음에는 예상대로 작동합니다. 당신이 그것을 기각하고 그것을 다시 보여 주면 (활동이나 그와 비슷한 것을 파괴하지 않고), 회전하는 이미지는 회전을 멈 춥니 다. API Demo에서 "Indeterminate 표시"를 클릭하고 뒤로를 눌러 대화 상자를 닫은 다음 버튼을 다시 클릭하여 확인할 수 있습니다.

"ProgressBar"회전 이미지에 문제가있는 것과 같은 문제가 있지만 내 자신의 진행률 대화 상자를 구성 해 보았습니다.

누구든지이 문제의 해결 방법이 있는지 궁금합니다.

+0

가능한 중복에서 전체 쉽게 따라하는 튜토리얼을 보일 수 있는가? http://stackoverflow.com/questions/2231438/progress-dialog-while-starting-new-activity 몇 가지 코드를 볼 수 있습니까? 또한 보여주기 전에 매번 processdialog를 다시 만들려고 했습니까? 그래서 뭔가 같은 procDialog = new ProcessDialog (...); – Mike

답변

24

Dialog을 닫을 경우 동일한 인스턴스를 다시 표시하면 안됩니다. 새 것을 만들거나 dismiss() 대신 hide()을 사용하십시오. hide()을 사용할 때 더 이상 필요하지 않은 경우에도 dismiss()을 사용해야합니다.

1

활동에 ProgressDialog 인스턴스를 선언하고 onCreateDialog(int)을 무시할 수 있습니다. 그런 다음 showDialog(int)을 호출하는 대신 ProgressDialog의 인스턴스를 onCreateDialog(int)으로 전화를 걸어 dialog.show()으로 호출하면됩니다. 내가 그들에게 자신을 관리하기 위해 내가 가지고 있지 않은 Activity.showDialog() 같은 활동의 대화 방법을 사용하고 싶어하고 또한 그들이 것, 그래서 때문에

public class Home extends Activity { 

ProgressDialog recordingDialog; 

//where you want to call the dialog 
recordingDialog = (ProgressDialog)onCreateDialog(RECORDING_DIALOG_KEY); 


@Override 
protected Dialog onCreateDialog(int id) { 
    ProgressDialog dialog = new ProgressDialog(this); 

    switch (id) { 
    case RECORDING_DIALOG_KEY: 
     ((ProgressDialog) dialog).setIndeterminate(true); 
     dialog.setCancelable(false); 
     ((ProgressDialog) dialog) 
       .setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setMessage("Recording..."); 
     dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Stop", 
       dialogStopListener); 

     dialog.show(); 

     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 
} 
4

나는 같은 대답을 찾고 있었어요, 여기에 대답을하지만 아무도 나를 위해 일하지 회전에 따라 자동으로 재생성됩니다.

다른 답변과 마찬가지로 dismiss()가 ProgressDialog에서 호출되면 회전이 중지됩니다. Activity.onCreateDialog()은 대화 상자에 대한 참조를 저장하므로 일단 작성되면 다음 Activity.showDialog() 호출에서 다시 생성되지 않습니다. Activity.onPrepareDialog()으로 전화하여 이미 가지고있는 인스턴스를 사용합니다. 해산되면 다시 보일 때 돌지 않습니다.

ProgressDialog의 ID로 지정하고 Dialog.dismiss()을 호출하면 강제로 다시 생성 할 수 있습니다. 이 작업을 취소하고 참조를 제거하므로 Activity.onShowDialog()이 다음에 호출 될 경우 Activity.onPrepareDialog() 대신 Activity.onCreateDialog()이 사용되며 새로운 (회전하는) 인스턴스가 생성됩니다.

ProgressDialog을 해지하거나 취소 할 수 있는지 확인하려면 Activity.removeDialog()으로 전화 할 수 있도록 청취자를 설정해야합니다. 그렇지 않으면 해고 될 것입니다. Activity.showDialog()에 전화하기 바로 전에 전화를 걸 수도 있습니다.

누군가를 돕는 희망.

1

클래스를 정의하고 AsyncTask를 구현할 수 있습니다. 백그라운드 프로세스를 이와 같이 doinbackground() 메소드에서 정의 할 수 있습니다.

@Override 
    protected String doInBackground(String... params) { 
    publishProgress(new Integer(1)); 
    for(int i=0;i<=300;i++){ 
System.out.println(i); 
} 
publishProgress(new Integer(1)); 
for(int i=301;i<=600;i++){ 
System.out.println(i); 
} 
................. 
.................... 
........................... 
//your background tasks 
publishProgress(new Integer(1)); 
for(int i=601;i<=900;i++){ 
System.out.println(i); 
} 
pd.dismiss();//dismiss the progress dialog here... 
return null; 
} 

또한 onProgressUpdate() method.Check하여 진행 정보 http://www.androidcookers.co.cc/2011/12/want-to-run-progress-dialog-in-android.html