응용 프로그램이 백그라운드에있는 동안 DialogFragment를 닫는 적절한 방법
DialogFragment를 사용하기 시작했습니다. 방향 변경 등을 통해 잘 작동하기 때문입니다. 그러나 내가 만난 불쾌한 문제가 있습니다.
나는이 AsyncTask
쇼 DialogFragment 및 일축를 진행 것을 onPostExecute
. onPostExecute
응용 프로그램이 백그라운드에 있을 때 (예 : 홈 버튼을 누른 후)를 제외하고는 모든 것이 잘 작동합니다 . 그런 다음 DialogFragment 닫기- " Can not perform this action after onSaveInstanceState
" 에서이 오류가 발생했습니다 . 도. 일반 대화 상자는 잘 작동합니다. 그러나 FragmentDialog는 아닙니다.
그래서 응용 프로그램이 백그라운드에있는 동안 DialogFragment를 닫는 적절한 방법은 무엇입니까? 저는 Fragments를 많이 사용하지 않았기 때문에 뭔가 빠진 것 같습니다.
DialogFragment
라는 메서드가 있습니다 dismissAllowingStateLoss()
이것이 내가 한 일입니다 (df == dialogFragment)
.
다음과 같이 대화 상자를 호출해야합니다.
df.show(getFragmentManager(), "DialogFragment_FLAG");
대화 상자를 해제하려면 다음을 확인하십시오.
if (df.isResumed()){
df.dismiss();
}
return;
조각의 onResume () 메서드에 다음이 있는지 확인하십시오 (df 아님).
@Override
public void onResume(){
Fragment f = getFragmentManager().findFragmentByTag("DialogFragment_FLAG");
if (f != null) {
DialogFragment df = (DialogFragment) f;
df.dismiss();
}
super.onResume();
}
이런 식으로 대화 상자가 표시되면 닫힙니다 .. 표시되지 않으면 대화 상자가 취소되고 조각이 표시됩니다 (onResume) ...
이것이 내가 원하는 것을 달성하기 위해해야하는 fragment_RedemptionPayment
일입니다. 맨 위에 전역 적으로 선언 된 이름의 대화 조각을 표시하는 Fragment 활동 이 있습니다. 다음 코드 DialogFragment
는 활동이 백그라운드로 이동하고 포 그라운드로 돌아 오기 전에 표시 되는 경우를 닫습니다.
@Override
public void onResume() {
super.onResume();
if(fragment_RedemptionPayment.isVisible()){
fragment_RedemptionPayment.dismiss();
}
}
작동 할 수있는 해결책은 Fragment.setRetainInstance(true)
dialogfragment에서 설정 하는 것이지만 가장 좋은 수정은 아닙니다.
때때로 프레임 워크가 상태를 먼저 복원 할 수 있도록 대화 작업을 대기열에 추가해야한다는 사실을 알게되었습니다. 현재 Looper를 잡고 (Activity.getMainLooper())
Handler로 감쌀 수 있다면 해당 큐에 실행 파일을 게시하여 큐의 뒤쪽으로 해고를 전달할 수 있습니다.
나는 자주하는 별도의 조각 사용하게 retaininstance(true)
그가있다을 ResultReceiver
. 따라서 결과 수신기를 내 작업에 전달하고 onReceive에서 콜백을 처리합니다 (종종 다른 수신기의 라우터로 사용). 그러나 비동기 작업을 사용하는 경우 가치보다 약간 더 많은 작업이 될 수 있습니다.
'Programing' 카테고리의 다른 글
소스 파일 'Properties \ AssemblyInfo.cs'를 찾을 수 없습니다. (0) | 2020.11.20 |
---|---|
C #은 부분적으로 해석되거나 실제로 컴파일됩니까? (0) | 2020.11.20 |
버전없이 maven으로 프로젝트를 빌드하는 방법 (0) | 2020.11.20 |
중첩 된 목록의 첫 번째 요소 선택 (0) | 2020.11.20 |
프로젝트를 grunt로 빌드 할 때 Fontawesome이 작동하지 않습니다. (0) | 2020.11.20 |