2

onCreate/onCreateView에서 더 많은 부분 이미 내 조각의 기존 인스턴스를 조회하기 위해 FragmentManager.findFragmentByTag()를 호출하고 있으며 찾은 것으로 보입니다.FragmentManager.put/getFragment vs findFragmentByTag

그래서 putFragment/getFragment의 요점은 무엇입니까? 추가 비용을 절감하거나 추가적인 라이프 사이클을 발생시킬 수 있습니까? 그것은 findFragmentByTag()에 대한 대안 일 뿐이거나 비슷합니다. FragmentManager.putFragment()를 사용하지 않고도 프래그먼트가 자동으로 저를 위해 저장되기 때문에 보입니다.

+0

자세한 내용은 http://stackoverflow.com/questions/6446961/when-to-use-fragmentmanagerputfragment-and-getfragment –

+0

해당 질문은이 질문과 동일하지 않으며 해당 답변은 FragmentManager의 본래 상태 저장 어떤 식 으로든 행동. ** 좀 더 명확하게 편집 된 질문 제목 –

답변

3

그래서 putFragment/getFragment의 요점은 무엇입니까?

현재 구현에 따르면, putFragment(Bundle bundle, String key, Fragment fragment)은 매개 변수 키를 사용하여 단편의 색인을 번들에 넣습니다. 그리고 나서 getFragment(Bundle bundle, String key) 동일한 키로 번들에서 검색 할 수있는 동일한 인덱스에서 조각을 가져옵니다. 조각은 FragmentManager에 추가 된 후에 만 ​​FragmentManager에 색인을 가지므로 조각이 추가 된 후에 만 ​​조각에 putFragment()를 호출 할 수 있습니다.

여분의 내용을 저장하거나 추가 수명주기의 원인이 발생합니까?

조각의 색인 만 저장합니다. 더 이상 다른 것이 없으며 추가 라이프 사이클 물건이 생기지 않습니다.

more 또는 같은 것을 덜 사용하는 findFragmentByTag()의 대안일까요?

예, 그렇습니다.

현재 구현에 따르면 putFragment/getFragment는 findFragmentByTag()에서도 수행 할 수 있습니다. putFragment/getFragment의 기능은 번들 매개 변수없이 사용할 수 없기 때문에 매우 제한적이므로 onSaveInstanceState()putFragment()을 호출해야합니다.

+0

답장을 보내 주셔서 감사합니다. 아마도 put/get을 사용하면 findFragmentByTag()를 사용하는 것보다 읽기가 쉽다. 어쨌든 조각을 추가하거나 추가하지 않을 수있는 시나리오를 정상적으로 처리하기 때문에 태그를 계속 사용한다. –

0

조각을 표시하지 않고 단편 관리자 내부에 단편과 그 상태를 저장하는 안전한 방법 일 것입니다.

예를 들어 활동 필드에 저장된 조각이 2 개 있습니다. 그 중 하나를 표시하고 화면의 방향을 변경 한 후에 다른 것을 대체하십시오. 활동의 필드가 다시 작성되지만 현재 표시된 단편은 상태를 저장하고 다른 단편은 저장하지 않습니다. 그러나 조각을 조각 관리자에 저장하면 실제 상태로 두 조각이 생깁니다.

+0

Replace를 사용하면 FragmentManager에서 프래그먼트를 제거하는 것과 동일하며 putFragment()는 현재 fragmentmanager에 추가 된 프래그먼트에서만 실행할 수 있습니다. –

+0

@ HunterGuy2 thats하지만 실제로 그것은 두 개의 분리 된 저장소입니다. 트랜잭션을 통해 조각을 추가하면 조각 관리자를 표시하고 저장소에 저장한다는 의미입니다.하지만 put/get을 사용하면 표시된 조각과 별도로 표시하지 않고 저장할 수 있습니다. – Stepango

+0

요점은 필자가 사용하면 put을 사용할 수 있다고 생각하지 않는다는 것입니다. 아직 추가되지 않았고 추가 된 경우 중요하지 않습니다. –