사용자가 다른 작업을 수행 할 때 DialogFragments
을 /에 동적으로 추가/제거하려고합니다. 문제는 FragmentManager
이 제대로 제거하지 못한다는 것입니다. 나는 remove()
함수를 호출하기 때문에, 왜이 Fragments
이 제거되지 않는지 궁금합니다. 온라인으로 검색 한 결과 제거 방법은 FragmentManager
에서 Fragments
을 제거하기 위해 사용해야한다고 사람들이 말한 것입니다. 표시되는 것을 보여주는FragmentManager가 동적으로 추가 된 조각을 삭제하지 않음
// originally added `LoginRestFragment` with TAG_LOGIN_REST_FRAGMENT tag to Fragment Manager
rest = new SettingsDialogFragment();
FragmentManager fm = getFragmentManager();
rest.setArguments(bundle);
Fragment fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
Log.d("frag_type", fragment.toString());
fm.beginTransaction().remove(fragment).commit();
fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
Log.d("is_frag_removed", fragment.toString());
// why does this return a Fragment type ^^ shouldn't it throw null errror?
Log.d("rest", rest.toString());
//^this shows rest has been updated from LoginRestFrament to SettingsDialogFragment
fm.beginTransaction().add(rest, TAG_LOGIN_REST_FRAGMENT).commit();
fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
Log.d("frag_type", fragment.toString());
// why is this not SettingsDialogFragment??
로그 문 : 내가 뭐하는 거지 보여주는 아래
예제 코드를. 화면에 표시되는 것은 더 이상 LoginRestFragment가 아니라 SettingsDialogFragment
(예상 한대로)이고 rest는 클래스 변수입니다.
D/frag_type: LoginRestFragment
D/is_frag_removed: LoginRestFragment
D/rest: SettingsDialogFragment
D/frag_type: LoginRestFragment
커밋을 실제로 완료하기 전에 UI 스레드주기가 완료 될 때까지 기다려야한다고 생각합니다. – DeeV