0

프래그먼트 작업 항상 트랜잭션에 replace()을 사용했지만 프래그먼트의 뷰를 복원하고 해당 프래그먼트로 돌아올 때 다시로드되지 않도록 인스턴스 상태를 더 이상 저장할 필요가 없으면 좋겠다. 따라서 add()으로 작업하기로 결정했습니다. 문제는 다른 조각을 추가 할 때 이전 조각보기가 배경에 그대로 남아 있고 괜찮습니다 (예상 한 동작입니다). 그러나 문제는 배경에서 실제로보기와 상호 작용할 수 있다는 것입니다. 예 :FragmentTransaction add() behavior

조각 내가 프래그먼트 추가하고 나중에 조각 B 추가 할 때 Button

조각 BTextView

을 가지고있다, 나는 할 수 있어요 클릭 조각 A의Button, 심지어에 머물고 조각 B의보기.

내가 사용 :

FragmentTransaction fragmentTransaction = 
      getSupportFragmentManager().beginTransaction(). 
      add(getRootViewContainer(),fragment,fragment.getClass().getSimpleName()); 

if (shouldGoBack) 
    fragmentTransaction.addToBackStack(fragment.getClass().getSimpleName()); 

getRootViewContainer() 반환 ID 내 활동의 주요 컨테이너로 사용하고있어 FrameLayout.

이제는 기본 동작이 add()입니까?

그렇다면 적절한 방법이 있습니까 아니면 그냥 replace()을 사용해야합니까?

+0

솔루션을 아직 찾았습니까? 당신이하지 않은 경우에 아래를보십시오. 나는 내 자신을 사용하기 때문에 내 것이 효과가있을 것이라고 확신한다. –

답변

2
FragmentTransaction.hide(fragmentBehind); //works for me! 

예 :

//I have it globally available 
FragmentTransaction trans = MainActivity.getManager().beginTransaction(); 

//not globally 
FragmentTransaction trans = getFragmentManager().beginTransaction(); 
MapFragment newFragment = new newFragment(); 
trans.add(R.id.fragmentContainer, newFragment, tag); 
trans.hide(this); 
trans.addToBackStack(tag); 
trans.commit(); 
+0

안녕하세요, 지연 죄송합니다. 나는이 방법을 사용하여 파편을 숨기고 보여 주었지만, 나는 이것을 보여 주거나 다른 것을 숨겨야 할 때 이것을 피하고 싶었다. 우리가 할 수있는 다른 방법을 아십니까? 감사. – vinitius

+0

레이아웃의 포커스를 사용하지 않도록 설정 하시겠습니까? 나는 정말로 다른 깨끗한 방법을 모른다. 이 방법은 나와 함께 잘 작동하며 약 15 종류의 Fragments를 사용하고 있습니다. 원하는 경우 100 개 이상의 조각을 가질 수 있지만 위의 함수로 인해 모든 것이 잘됩니다. –

0

예, add()의 기본 동작입니다. 정말로 replace()를 사용하지 않으려면 "오래된"조각 안에있는보기를 비활성화 할 수 있습니다.

3

당신이 여기에서 할 수있는 것은 단지 현재의 단편의 거래시 이전 조각을 숨 깁니다.

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    Fragment newFragment= new MyFragment(); 
    ft.hide(CurrentFragment.this); 
    ft.show(newFragment); 
    ft.commit(); 

저에게 해 봤습니다.