2012-11-30 6 views
1

다음은 내가 가지고있는 문제입니다. View V에있는 FragmentPagerAdapter FPA에 포함되어있는 조각 F가있는 활동 A가 있습니다. (A-> V-> FPA-> F)onDestroy()에서 조각을 분리 할 수 ​​있습니까?

A가 파괴되면 예를 들어, 스왑 된 상태), F가 붙어 있고 FPA에 있으며 V에 있습니다. 그러나 A가 다시 생성되면 (예 : 누군가 다시 버튼을 눌러 활동으로 들어갑니다) V와 FPA가 존재하지 않으므로 F가 첨부 된 상태에서 재 작성되지만 존재하지 않는 무언가에 생성되므로보기 계층 구조에 전혀 없습니다. 그런 다음 FPA가이 프래그먼트에서 instantiateState를 시도 할 때 FPA가이 프래그먼트를 첨부하려고 시도합니다.

분명히이 문제를 해결할 수있는 몇 가지 방법이 있습니다 (예 : V 및 FPA가 onCreate에있는 활동으로 인해 조각이 생성 될 때 어딘가에 있어야 함).하지만 계속 진행하고 싶습니다. 필요할 때만 FPA와 V를 느리게 생성하십시오.

따라서 F의 상태를 onDestroy()에서 분리하도록 업데이트하는 것이 바람직합니다. 그러나 state는 onPause()에 저장되어 있는데, 이것은 내가 여기서 다소 운이 없음을 의미합니다.

A의 onDestroy()에서 저장된 상태를 업데이트하는 방법이 있습니까? "활동이 파괴되면이 조각을 재수 화하지 마십시오"라고 말할 수있는 방법이 있습니까? 이 점에 대해 생각하고있는 다른 명백한 방법이 있습니까? 내가 잘못한 일을 여기에서하는 것 같아.

답변

1

FragmentPagers으로 문제가 발생했습니다. 내가하는 일은 Activity onCreate()에 null 번들을 전달한 다음 생성 될 때마다 처음부터 모든 것을 생성하는 것입니다. 좋아요 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(null); 
    // do my stuff 
} 

이렇게하면 활동을 다시 만들 때 조각이 전달되지 않습니다.

+0

휴 - 꽤 좋은 입술이야. 마찰 솔루션. FragmentPagerAdapter가 아닌 다른 조각이 복원되어야하는 내 활동에는 확실히 작동하지 않습니다. – secureboot

+0

이 솔루션을 사용하는 동안 특정 Fragments에 대해 상태를 유지하려면, 내가 한 것은 Fragments 상태를 Activity의 State Bundle에 프로그래밍 방식으로 유지하는 것입니다. 액티비티의 onSaveInstanceState()에서 Fragment의 onSaveInstanceState()를 호출하여 Fragment가 Bundle에 상태를 추가 할 수있게했습니다. 프래그먼트를 프로그래밍 방식으로 만들고 추가하는 Activity의 onCreate()에서 Fragment.setArguments()에 번들을 전달합니다.Fragment는 onCreate()에서 getArguments()를 통해 Bundle에서 저장된 상태를 검색하고 onCreate()에 전달 된 Bundle을 무시합니다. – Trevor

1

당신이 쓴 :

내가 고려하지 않고있어 그 이것에 대해 생각의 다른 확실한 방법이 있나요?

이 직접 제목의 질문에 대답하지만 ViewPagerFragment 상태를 유지하는 방법에 편리한 솔루션을 제공하지 않습니다. 또한

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.photos_pager_activity); 

    MyImageFragment fragment; 
    if (savedInstanceState != null) { 
     fragment = (MyImageFragment) getFragmentManager().findFragmentByTag("my_image_fragment_tag"); 
    } else { 
     fragment = new MyImageFragment(); 
     getFragmentManager().beginTransaction().add(android.R.id.content, fragment, "my_image_fragment_tag").commit(); 
    } 

참조 : 다음 ActivityActivity에서 Fragment 태그에 의해 파괴 될 때

당신은 Fragment를 초기화 그 Fragment 상태를 저장할 수 있습니다

Uses of fragment tags

ViewPager and fragments — what's the right way to store fragment's state?

+0

그래,하지만 그 링크가 설명 할 때 ID와 태그는 FragmentPagerAdapter를 사용하면 설정됩니다. – secureboot

+0

왜 FPA 세트 태그를 사용할 수 없습니까? –

+0

FPA는 대부분을 다시 작성하지 않고 태그 이름을 만드는 makeFragmentName 함수를 가지고 있으며 ID는 컨테이너의 ID로 설정됩니다. – secureboot

관련 문제