2013-08-30 2 views
1

중첩 된 하위 단편을 상위 단편에 추가하려고합니다.LinearLayout에 프래그먼트를 프로그래밍 방식으로 추가하기

지금
public class FragmentDatasheetWithHeader extends Fragment { 
    private long mRowId; 
    private String mSid; 

    @Override 
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 

     final ScrollView scrollView = new ScrollView(getActivity()); 
     final LinearLayout linearLayout = new LinearLayout(getActivity()); 
     linearLayout.setId(4711); 
     linearLayout.setOrientation(LinearLayout.VERTICAL); 

     scrollView.addView(linearLayout); 

     createUI(); 

     return scrollView; 
    } 

    private void createUI() { 

     final FragmentProductDetailHeader fragmentHeader = FragmentProductDetailHeader.newInstance(this.mRowId, FragmentProductDetailHeader.HEADERTYPE_SMALL); 
     final FragmentDatasheet fragmentDatasheet = FragmentDatasheet.newInstance(this.mRowId, this.mSid); 

     final FragmentManager fragmentManager = getChildFragmentManager(); 
     fragmentManager.beginTransaction().add(4711, fragmentHeader, "fragmentHeader").commit(); 
     fragmentManager.beginTransaction().add(4711, fragmentDatasheet, "fragmentDatasheet").commit(); 
    } 
} 

내 문제 : 활동을 보관하지 마십시오 나는 "활성화 된 개발자 옵션에서

이 (파괴

모든 먼저 내 코드에서

.... 잘 작동하지만, 사용자가 떠날 때마다 모든 활동) "

FragmentDatasheetWithHeader가있는 활동이 열려 있고 앱이 백그라운드로 들어가서 포 그라운드로 돌아올 때 둥지 ed 파편이 두 배가됩니다. 그러나 중첩 된 조각 (Nested Fragments)의 컨테이너가 LinearLayout 인 경우에만 나타납니다. 컨테이너가 FrameLayout 인 경우, 중첩 된 Fragment는 배가되지 않습니다.

무슨 일입니까?

+0

바꾸기로 바꾸기를 시도하십시오. – Leandros

+0

그것은 내 문제를 해결하지만 이제는 마지막 조각 만 볼 수는 없다 :-( –

답변

2

컨테이너가 FrameLayout 인 경우 중첩 된 조각은 배가되지 않습니다.

잠재적으로 사실이 아닙니다. 새로운 파편들이 낡은 파편들 위에 그냥 앉아서 그것들을 효과적으로 모호하게 만들 가능성이 더 큽니다. 따라서, 근본적인 문제는 아마도 동일합니다. 시각적 효과는 다양한 ViewGroup 구현이 자녀를 정렬하는 방식 때문에 달라집니다.

말하자면, 조각이 이전 상태에서 '새로 생성되거나'복원되었는지 쉽게 알 수 있습니다 : onCreateView()에 전달 된 Bundle savedInstanceState 매개 변수 (및 기타 다양한 생활 순환 관련 방법, 예 : onActivityCreate() 등).

보다 구체적으로는, 당신은 아마 onCreateView()이 뭔가를 추가 할 것입니다 :

if (savedInstanceState == null) createUI(); 

에서 복원하기 이전 상태 없을 때 조각 만 추가됩니다 그런 식으로. 이전 상태가있는 경우 프레임 워크는 이전 조각을 대신 복원해야합니다. 후자의 경우 복원 된 조각을 태그로 검색하여 처리 할 수 ​​있습니다.

관련 문제