android fragment 질문드립니다.

조회수 1498회

fragment를 replace할 때 사용하는 TAG인자는 무엇인가요?

FindFragmentByTag로 위의 fragment를 찾을 수 있는것이 맞다면, remove된 fragment도 찾을 수 있는건가요?

fragmentManager에서 찾지 않고도 fragment를 전역으로 선언해서 사용해도 제 생각으론 별 문제가 없어 보이 는데 굳이 fragmentManager에서 찾는 이유가 무엇인가요?

감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 프래그먼트를 add, replace 할 때 옵션으로 Tag를 지정할 수 있습니다. 이 값은 말씀하신 것처럼 FragmentManager#findFragmentByTag() 함수를 통해 프래그먼트를 꺼내올 때 사용합니다.

    FragmentManger.java의 소스코드를 보시면 아시겠지만 해당 함수는 FragmentManager의 mActive와 mAdded라는 리스트에서 검색을 합니다. 만일 삭제를 하더라도 addToBackStack()을 하는 경우는 해당 프래그먼트가 mActive에 존재하기 때문에 검색이 되지만 그렇지 않은 경우는 null을 반환합니다.

    ArrayList<Fragment> mAdded;
    ArrayList<Fragment> mActive;
    
    ...    
    
    @Override
    public Fragment findFragmentByTag(String tag) {
        if (mAdded != null && tag != null) {
            // First look through added fragments.
            for (int i=mAdded.size()-1; i>=0; i--) {
                Fragment f = mAdded.get(i);
                if (f != null && tag.equals(f.mTag)) {
                    return f;
                }
            }
        }
        if (mActive != null && tag != null) {
            // Now for any known fragment.
            for (int i=mActive.size()-1; i>=0; i--) {
                Fragment f = mActive.get(i);
                if (f != null && tag.equals(f.mTag)) {
                    return f;
                }
            }
        }
        return null;
    }
    

    두번째 질문은 내용을 조금 바꿔본다면 이유를 찾는데 도움이 되지 않을까 싶습니다. 액티비티를 전역적으로 관리하고, 접근할 수 있지만 그렇게 하지 않는 이유와 같습니다. 액티비티처럼 프래그먼트의 생명주기도 안드로이드 시스템에 의해 관리되기 때문에 이걸 정교하게 처리하려면 결국 FragmentManager와 같은 클래스를 만들어야 합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 그렇다면 같은 TAG로 replace한 fragment가 복수 존재한다면 마지막으로 추가된 fragment를 찾아오나요? 알 수 없는 사용자 2017.4.21 14:46

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)