Android 조각 : 숨기기 / 표시 또는 추가 / 제거 / 바꾸기를 사용하는 경우


117

일부 컨테이너 뷰에서 현재 조각을 다른 조각으로 바꾸고 싶다고 가정합니다. 교체를 사용하는 것이 더 낫습니까?

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, null);
    ft.commit();

... 또는 다음, 표시 및 숨기기?

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.hide(oldFragment);
    ft.show(newFragment);
    ft.commit();

이 작업을 수행하는 한 가지 방법이 더 효율적입니까? 이러한 메서드를 언제 사용해야하는지 또는 관련 프래그먼트의 수명주기에 어떤 영향을 미치는지에 대한 많은 정보를 찾을 수 없습니다. 감사!


조각 A에서 조각 B로 이동 한 다음 조각 A로 돌아 가면 onCreateView와 같은 수명주기 이벤트가 조각 A에서 호출되지 않는지 어떻게 확인할 수 있습니까? 태그로 조각 찾기가 작동합니까?
blackHawk

답변:


135

따라갈 경로를 결정하려면 조각으로 수행 할 계획을 고려해야합니다. FragmentTransaction을 사용하여 조각을 숨기면 여전히 수명주기의 실행 상태 일 수 있지만 UI가 창에서 분리되어 더 이상 표시되지 않습니다. 따라서 기술적으로 여전히 조각과 상호 작용하고 나중에 필요한 UI를 다시 연결할 수 있습니다. 조각을 교체하면 실제로 컨테이너에서 꺼내고 수명주기의 모든 분해 이벤트 (onPause, onStop 등)를 거치며 어떤 이유로 해당 조각이 다시 필요한 경우 해당 조각이 다시 필요합니다. 컨테이너에 다시 삽입하고 모든 초기화를 다시 실행하십시오.

해당 조각이 다시 필요할 가능성이 높으면 완전히 다시 초기화하는 것보다 레이아웃을 다시 그리는 데 비용이 덜 드는 작업이므로 숨기기 만하면됩니다.


5
우리의 요구를 들어, 조각을 초기화하는 것은 우리가 아마도 함께 갈 것입니다, 꽤 비싼 hide()하고 show()그에 저장! 감사합니다!
Robert Karl

2
안녕하세요, 창에서 분리라고 말하면 onDetach () 콜백이 호출된다는 의미입니까? 나는 그것을 실험했지만 그렇지 않은 것 같습니다.
GingerJim

아마도 그는 "분리"를 의미했을 것입니다. 조각을 분리 / 재 연결할 수도 있습니다 (추가로 추가 / 제거, 표시 / 숨기기)
comeGetSome dec.

1
@Zainodis, 나도 같은 문제가 있습니다. 내 해결책은 onSaveInstanceState ()-savedInstanceState.putBoolean (STATE_HIDDEN, isHidden ());에 조각의 숨겨진 상태를 저장하는 것입니다. 그런 다음 onCreate ()에서 (savedInstanceState! = null) 숨겨진 상태를 되찾고 조각이 숨겨져 있으면 트랜잭션으로 숨 깁니다.
worawee.s

1
@ worawee.s 안녕하세요, 업데이트에 감사드립니다 :)! 나는 얼마 전에 문제를 해결했습니다. 숨기기 / 표시 등이 실제로 필요하지 않았으므로 완전히 삭제했으며 이제 단일 창에서 추가 / 바꾸기 또는 단일 조각 작업과 같은 표준을 사용합니다 (기본적으로 마스터 세부 흐름). . 여전히 Hide를 사용하는 사람들에게는 솔루션이 정말 도움이 될 것입니다. savedInstance! = null을 확인하지 않는 것은 이전에 내가 만든 실수 중 하나였습니다.
AgentKnopf 2015 년

5

당신은 기본적으로 스스로 대답했습니다. 교체하려면 (따라서 오래된 조각이 더 이상 필요하지 않음) replace()일시적으로 숨기려면을 사용하십시오 hide().


기본적으로 replace는 removeAll을 수행합니다. 나는 일치 hideAll :( 찾을 수 없습니다
AlikElzin-kilaka

모든 세 단편 내 활성 3 프래그먼트 @ AlikElzin-kilaka 내가 따라야 방법 네트워크로부터 데이터를 페치
Mansukh 아히

0

4 조각으로 내 활동에서 숨기기 / 표시 방법을 사용하여 내 솔루션을 해결했지만 대화를 표시 할 때 무작위로 추가 및 교체 방법을 사용할 때 창 나쁜 토큰 예외가 발생하면 잘못된 토큰 예외가 발생하지 않으므로 show / 숨기기 방법이 완벽하지 않습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.