: 내 모든 조각 내 활동에 (참) setRetainInstance를 사용하는안드로이드 : 화면 방향 변경 fragment.getActivity에 null의
내가이 일을하고있어에서 onCreate :
을if (savedInstanceState == null) {
fragment = onCreatePane();
fragment.setArguments(intentToFragmentArguments(getIntent()));
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.add(R.id.root_container, fragment, getFragmentTag());
trans.commit();
} else {
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
if (fragment == null) {
fragment = getSupportFragmentManager().findFragmentByTag(getFragmentTag());
}
if (fragment == null) {
fragment = onCreatePane();
fragment.setArguments(intentToFragmentArguments(getIntent()));
}
trans.add(R.id.root_container, fragment, getFragmentTag());
trans.commit();
}
그래서 활동을 만들고 savedInstance가 null 일 때 조각을 만들고 매개 변수를 설정하고 트랜잭션을 시작하고 자체 조각으로 트랜잭션에 내 조각을 추가합니다 (나중에 다시 가져 오기 위해).
사용자는 활동과 상호 작용하고 방향을 변경합니다. 활동은 파괴되고 재창조됩니다 (평상시와 마찬가지로 활동적으로). 이제 else를 입력하면 조각이 null이고 조각 관리자가 보유한 올바른 조각을 반환하는 fragment = getSupportFragmentManager().findFragmentByTag(getFragmentTag());
을 수행합니다.
문제는이 조각이 파괴 된 이전 활동에 대한 참조를 보유하기 때문에 fragment.getActivity를 수행하면 null이 반환된다는 것입니다. 어떻게 acitivy에 대한 조각 참조를 새롭게 재 작성된 Activity로 업데이트 할 수 있습니까?
업데이트 : : 더 정확하게는 새로운 검색을 얻을 때 onNewIntent를 호출하는 SearchActivity입니다. 따라서 실제 상호 작용은 다음과 같습니다 -> 사용자가 검색을 수행합니다 -> 검색이 올바르게 표시됩니다 -> 사용자가 방향을 바꾸면 결과가 올바르게 표시됩니다 (사용자가 검색 결과와 상호 작용하면) -> 사용자가 검색 버튼에서 새 검색을 수행하고 검색 로직을 가진 프래그먼트에 새로운 인 텐트를 디스패치하는 SearchActivity의 onNewIntent를 호출합니다. 액티비티에 대한 참조가 null이기 때문에 여기에서 충돌합니다
화면 방향이 바뀌면 항상 조각 참조가 fragment = getSupportFragmentManager()로 업데이트됩니다. findFragmentByTag (getFragmentTag()); 또한 NOT NULL 부분을 반환합니다. 문제는 액티비티에 대한 프래그먼트 참조가 여전히 null이라는 것입니다 (새롭게 생성 된 것으로 다시 업데이트되지는 않을 것입니다) – StErMi
괜찮습니다. orietnation이 변경되면 null로 변하기 쉬운 변수가 생깁니다. ...... 나는 방금 전에 "if (savedInstanceState == null) {" –
"당신이 우리에게 더 많은 코드를 제공 할 수 있다면 더 좋을 것이라고 생각하기 때문에 ... –