2014-02-15 5 views
1

저는 Activity 호스트에 FragmentPagerAdapter를 사용하여 5 개의 파편이있는 ViewPager가 있습니다. 상위 액티비티에서 데이터를 사용할 수 있고 해당 데이터가 상위 액티비티의 바인딩 된 서비스 후에 만 ​​사용할 수있는 경우 내 조각이 뷰를 채울 수 있도록해야합니다. onSeviceConnected 메서드를 호출합니다.ViewPager 파편은 상위 액티비티의 바운드 서비스의 데이터에 의존합니다.

따라서 ViewPager, ActionBar 탭, FragmentPagerAdapter, ...를 onServiceConnected 메서드로 만드는 모든 코드를 넣었으며 Activity가 처음 시작될 때나 내가 다시 시작하고 다시 시작할 때 모든 것이 잘 작동합니다. 하지만 구성이 바뀌면 (화면을 회전 할 때), 프로그램을 디버그하고 onCreate를 호출 한 후 현재 선택된 부분이 onCreateView를 호출하고 문제가 발생합니다 (그 시간에 서비스가 호출되지 않고 i don 이 Fragment 레퍼런스를위한 데이터 준비가되어있다!).

또한 이벤트 리스너를 사용하려고하고 부모 활동이 (데이터를 사용할 수있을 때) 알림을 보낼 때만 단편을 채 웁니다. 단, PagerAdapter를 사용하기 때문에 조각을 만들었을 때 관리 할 수 ​​없습니다.보기 및 물론 적절한 경우 콘텐츠를 채 웁니다.

내가 궁금해하는 점은 : 화면을 회전 할 때 활동이 파괴되고 다시 생성된다는 점이 맞습니까? 그것이 사실이라면, 왜 이런 상황에서 활동이 처음으로 만들어진 것과 똑같은 일을하지 않을까요? 아무도 나에게이 문제에 대한 아이디어를 제안 할 수 있습니까? 당신이 그렇게 할 수없는 경우

void createMyFragment(value) { 
    Bundle bundle = new Bundle(); 
    bundle.putParcelable("key", value); 

    Fragment fragment = new MyFragment(); 
    fragment.setArguments(bundle); 
} 

@Override  
public void onCreate(Bundle bundle) { 
    value = bundle.getParcelable("key"); 
} 

, 당신은 귀하의 경우 예를 들어 그 일을 대신 onActivityCreated()viewPager.setAdapter(pagerAdapter)의 전화를 이동할 수 있습니다

답변

0

당신이 할 수있는 경우, 일반적으로는 Bundle에서 그 정보를 저장 in onCreateView() :

@Override 
public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    ... 
    viewPager = (ViewPager) dialogView.findViewById(R.id.viewpager); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    viewPager.setAdapter(new MyPagerAdapter(getActivity())); 
} 
관련 문제