2012-02-10 2 views
2

가이 코드 AlertDialogFragment 새에 AlertDialog.Builder (..)를 생성하는 간단한 DialogFragment 클래스입니다DialogFragment는

Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_SUBMISSIOIN_RESPONSE); 
AlertDialogFragment alert = AlertDialogFragment.newInstance(text, getString(R.string.worklog_alert_ok)); 
alert.show(getSupportFragmentManager(), DIALOG_SUBMISSIOIN_RESPONSE); 

를 사용하여 DialogFragment를 만들 제거되지 않습니다.

그때 나는 아직도 그 조각을 수있는 마지막 Log.d 메시지에, 그러나 대화

Fragment prev = getSupportFragmentManager().findFragmentByTag(dialogTag); 
if (prev != null) { 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.remove(prev).commit(); 
} 
Log.d(TAG, "dialog removed " + getSupportFragmentManager().findFragmentByTag(dialogTag) + ", isremoving = " + prev.isRemoving()); 

을 제거 할 (즉 getSupportFragmentManager().findFragmentByTag(dialogTag)가 null이 아니라 유효한 조각 반환).

대화 상자를 즉시 ​​강제로 제거하려면 어떻게합니까? 이 함수 다음에 실행되는 코드가 있고 대화 상자가 있는지 확인한 다음 아무 것도하지 않고 존재하지 않는 경우 다시 작성합니다. 그러나 getSupportFragmentManager().findFragmentByTag(dialogTag)이 유효 DialogFragment을 반환하기 때문에 절대로 다시 생성하지 않습니다.

나는 안드로이드 버전, 안드로이드 호환성 패키지를 사용하고 2.2

+1

당신의'dialog'가'DialogFragment'의 확장 인 경우 대화 상자 조각을 제거하기 위해'dismiss()'를 호출하십시오. – Varun

답변

1

transaction.remove(prev).commitAllowingStateLoss()를 사용해보십시오.

2

commit() 바로 뒤에 executePendingTransactions()으로 전화 해보세요. 이렇게하면 트랜잭션이 즉시 실행됩니다. commit()으로 전화하면 미래에 일어날 거래 일정 만 잡히기 때문에 문제가있을 수 있습니다.

public void showLoadingDialog() { 
     LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG); 
     if (fragment == null) { 
     fragment = new LoadingDialogFragment(); 
     fragment.setCancelable(false); 
     getSupportFragmentManager().beginTransaction() 
            .add(fragment, LoadingDialogFragment.FRAGMENT_TAG) 
            .commitAllowingStateLoss(); 

     // fragment.show(getSupportFragmentManager().beginTransaction(), LoadingDialogFragment.FRAGMENT_TAG); 
     } 
    } 

    public void hideLoadingDialog() { 
     LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG); 
     if (fragment != null) { 
     // fragment.dismissAllowingStateLoss(); 
     getSupportFragmentManager().beginTransaction().remove(fragment).commitAllowingStateLoss(); 
     } 
    } 

난이 당신을 도울 수있을 거라 생각 :

0

당신이 보여처럼 프로세스에 대한 단편 대화 상자를 숨길 수 있습니다.