2011-08-12 1 views
26

나는 보통의 수단을 통해 활동을 시작 했어 :CreateView() 번들을 조각화합니다. 그거 어디서 났어?

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
Fragment currentFragment = fragment; 
currentFragment.setArguments(getIntent().getExtras()); 
transaction.replace(R.id.singlePane, currentFragment); 
transaction.commit(); 

오른쪽 간단한데 : 때이 활동은로드

Intent startIntent = new Intent(this, DualPaneActivity.class); 
startIntent.putExtras(((SearchPageFragment) currentFragment).getPageState()); 
startActivity(startIntent); 

, 그것과 같이 프레임에 조각을 배치? 위의 예에서

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    // Fill state information 
    Bundle bundle; 
    if(savedInstanceState != null) bundle = savedInstanceState; // 1  
    else if(getArguments() != null) bundle = getArguments();  // 2 
    else       bundle = getActivity().getIntent().getExtras(); // 3 
    setPageState(bundle); 
} 

, 내가 밖으로 일했다 :

그러나, 당신이 할 수는 onCreateView() 메소드 액세스의 내부에 별도의 세 가지 번들 (당신이 포함하는 경우 네는 하나가 조각의 onCreate(Bundle savedInstanceState)가에 포함) 시행 착오에서 내가 원하는 번들은 두 번째 것이고 에서 가져온 것입니다.

제 생각에 getActivity().getIntent().getExtras();의 세 번째 것은 실제로 활동을 포함하기 시작한 의도에서 번들을 호출합니다. 나는 또한 실험에서 savedInstanceState이 항상 null 인 것으로 보입니다. 하지만 어디에서 오는가 가 null입니까? 여기에 주어진

savedInstanceState null이 아닌 경우,이 조각은 이전에 저장된 상태에서 을 다시 구성되고 :

documentation이 말한다.

그게 도움이되지 않습니다. 그것은 나를 계속 움직이는 것보다 나를 괴롭 히고 있습니다. 누군가가이 성가심으로 나를 도울 수 있습니까?

답변

12

최대한으로 onCreateViewonCreate()은 모두에서 번들로 전달됩니다.

onSaveInstanceState()을 무시하고 데이터를 묶음에 넣으면 onCreateView()에서 검색 할 수 있습니다. 그 이유는 이전에 저장된 상태에서 프래그먼트가 다시 구성 될 때 번들이 null이 아니게된다고 문서가 말한 이유입니다.

관련 문제