방향 변경시 단편 손실과 관련하여 고민 중입니다. 처음에는 조각이 오리 엔테이션 변경에 잘 응답하는 것 같고 아무 것도 잘못되었습니다. 그러나 예외는 이전에 만들어진 조각으로 돌아갈 때입니다. 내 fragmenthandler 활동에서 확인하고 있기 때문에.단편의 안드로이드 방향 손실 조각
스위치 사례 대신 큰 if 문을 사용하기로 결정했는데, 이는 내 지식을 이해하기에 더 컸기 때문입니다. if 문을 올바르게 처리하고, 로그 문으로 디버깅 했으므로 아무 것도 잘못된 것 같습니다. 아래는 미리 사용되거나 새로운 것을 만드는 조각 처리를위한 코드입니다.
public void fragmentHandle(Fragment fl, Fragment fr, String tl, String tr) {
Fragment cFragLeft = manager.findFragmentById(R.id.fragment_left);
Fragment cFragRight = manager.findFragmentById(R.id.fragment_right);
Fragment checkLeft = manager.findFragmentByTag(tl);
Fragment checkRight = manager.findFragmentByTag(tr);
FragmentTransaction ft = manager.beginTransaction();
if (cFragLeft != null && cFragRight != null && checkLeft != null
&& checkRight != null) {
ft.detach(cFragRight).detach(cFragLeft).attach(fr).attach(fl)
.addToBackStack(null).commit();
} else if (cFragLeft != null && cFragRight != null && checkLeft == null
&& checkRight == null) {
ft.detach(cFragLeft).detach(cFragRight)
.add(R.id.fragment_left, fl, tl)
.add(R.id.fragment_right, fr, tr).addToBackStack(null)
.commit();
} else if (cFragLeft != null && cFragRight != null && checkLeft == null
&& checkRight != null) {
ft.detach(cFragLeft).detach(cFragRight).attach(fr)
.add(R.id.fragment_left, fl, tl).addToBackStack(null)
.commit();
} else if (cFragLeft != null && cFragRight != null
&& checkRight == null && checkLeft != null) {
ft.detach(cFragLeft).detach(cFragRight).attach(fl)
.add(R.id.fragment_right, fr, tr).addToBackStack(null)
.commit();
} else {
ft.add(R.id.fragment_left, fl, tl).add(R.id.fragment_right, fr, tr)
.commit();
}
}
방향을 변경 한 다음 이전에 저장된 조각 (첫 번째 if 문)으로 돌아가서 왼쪽 및 오른쪽 조각 모두에 빈 화면이 표시됩니다. 이는 케이스 1이 호출되었을 때만 발생합니다. 단편 관리자가 태그로 태그를 찾았음에도 불구하고 거기에있는 파편을 기억하지 않는 것 같습니다.
나는 또한 onCreate를 확인했으며 아래에 나와 있습니다.
protected void onCreate(Bundle savedInstanceState) {
// super.onCreate
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_handler);
if (savedInstanceState == null) {
fragmentHandle(nFragLeft, nFragRight, "menuMain", "main");
}
}
완제품 용 버튼 설명이 포함되어 있습니다. onClickListeners를 사용하지 않고 xml onClick보다이 방법을 선호할지 여부는 확실하지 않습니다.
public void sendDestination(View v) {
nFragLeft = menudestFrag;
nFragRight = destFrag;
String tagLeft = "menuDestination";
String tagRight = "destination";
fragmentHandle(nFragLeft, nFragRight, tagLeft, tagRight);
}
이 문제를 해결할 수있는 방법이 있습니까? 방향을 변경 한 후에 만 발생합니다.
을 나는 안드로이드 매니페스트를 변경하여 작업을 수행 할 수 있습니다 알고 있지만, 그 취급의 합법적 인 방법이 아니다 내 생각에 조각. 안드로이드가 네이티브 방향 처리를 사용하는 것을 막을뿐입니다. 안드로이드가 태그로 찾을 수있는 것처럼 보이기 때문에 조각을 검색하는 방법을 찾고 있습니다. 그러나 아직 특정 조각의 데이터를 저장하지 않은 것 같습니다. 조각 내에서 데이터를 보존 할 필요가 없어도 부착 및 분리 대신 조각을 제거하고 추가하면 데이터를 보존 할 수 없기 때문에 다른 해결 방법을 발견했습니다. – Dethrax
그럼에도 불구하고 귀하의 솔루션을 시도했지만 즉시 문제가 있습니다. 동적 인 UI를 만들었습니다. 즉, 하나의 창에서 두 개의 창 (포트와 토지)으로 전환하고 그 반대의 경우도 마찬가지입니다. 이 솔루션을 사용하면 레이아웃이 변경되지 않으므로 다시 작성되지 않습니다. onCreateView를 통해 xml 레이아웃을 호출하고 있으므로이 솔루션이 나에게 적합하지 않다고 생각합니다./ – Dethrax
감사합니다. 요점은 매우 좋습니다. 당신은 내 애플 리케이션에 문제가 발생합니다. 나는 당신을 위해 또 다른 제안이 있는데, 나는 tryit을하지는 않았지만 작동 할 것이라고 생각한다. [this] (http://developer.android.com/guide/topics/resources/runtime-changes.html) onconfigurationChange attach/add/마지막 조각을 뒷받침에서 repalce. 이 도움을 바랍니다. – ovluca