2011-10-17 4 views
0

안녕하세요 저는보기 호출기와 조각으로 작업하고 있습니다. 오리엔테이션 변경을 재정의하여 오리엔테이션이 변경 될 때마다 onCreateView 메소드가 실행되지 않도록하고 싶습니다. 왜냐하면 내 앱의 onCreateView에서 많이 실행되어 방향이 변경되는 속도가 느려지 기 때문입니다. 또한 내 서버에있는 항목을 확인하고 무엇이 너무 많아서 오리 엔테이션이 변경 되었기 때문에 실제로 실행할 이유가 없습니다. 여기 Android Fragment Inflate layout

지금까지

내가 매니페스트

android:configChanges="orientation|keyboardHidden" 

에서 MainActivity에 이것을 가지고 그리고 난 내 조각이 사용하고 내가 설정 한 것입니다

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    getLayoutInflater(getArguments()).inflate(R.layout.main, null, false); 
    Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show(); 
} 

앱을 실행하고 방향을 바꾸면 토스트 쇼가 표시되지만 레이아웃은 결코 가로보기로 변경되지 않습니다. 그래서 나는 안드로이드가 가로 눕히기 때문에 풍경에 있다는 것을 인식하지 못했지만 대화 상자의 레이아웃처럼 우스꽝스럽게 레이아웃을 변경하면 강제로 닫히지 않거나 늘리는 세로 레이아웃이 유지되지 않습니다. 결과적으로 레이아웃을 부 풀리는 방법에 문제가 있다는 것을 알고 있습니다.

뷰어에서 방향이 변경 될 때 레이아웃을 변경하는 데 도움이되는 경우 큰 도움이됩니다.

감사합니다.

답변

2

1) onCreateView()가 아니라 Fragment onCreate()에 모든 서버 점검 루틴 및 기타 일회성 작업을 넣어야합니다. 로드하는 동안 "로드 중 ..."화면이 표시되어야한다면 FragmentActivity을 사용하여 "Loading ..."유형이 포함 된 FrameLayout의 레이아웃을 부 풀릴 것을 권장합니다. 그래픽. 먼저, FragmentActivity는 onCreate()를 실행하여 초기 뷰를 먼저 팽창시킨 다음 Fragment를 인스턴스화합니다. Fragment의 onCreate()에 서버 검사 코드를 넣은 다음 onCreateView() 메서드에서이 Fragment에 대한 View를 부 풀린다.

<FrameLayout 
     android:id="@+id/recorder_mic_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

그런 다음, 마이크 단편 실제로 다음 Java 코드로 인스턴스화 :

// make the Mic button 
FragmentManager fragMgr = getFragmentManager(); 
FragmentTransaction xact = fragMgr.beginTransaction(); 
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) { 
    xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit(); 
} 

FRAG_TAG는 여기에 정말 조각 인 마이크 버튼을 초기화 내 프로젝트 중 하나의 샘플은,이다 실제로 조각의 R.id와 다른 조각 인스턴스에주는 고유 한 태그 이름입니다. 이렇게하면 findFragmentByTag()를 사용하여 조각이 필요한 모든 위치에서 올바르게 인스턴스화되도록 할 수 있습니다.

프래그먼트 내에서 프래그먼트를로드하려는 경우이 코드를 약간 완화 할 수 있습니다 (예 : 응용 프로그램이 실제로 작동하는 방식). 몇 가지 뷰 중 하나를 부 풀릴 조각이있는 경우 if 문을 사용하여 적절한 프레임 ID를 선택하고 고유 한 FRAG_TAG를 지정하십시오. 조각 (Frame)에 대해 생성 한 각 FrameLayout에 대해 고유 한 R.id를 사용하는 것이 좋습니다. (예를 들어,이 조각은 각각의 마이크 조각 내 태그 이름이 LyricsMicButton HumMicButton 및 MetaMicButton, 될 정보 험 및 가사에 대해 서로 다른 견해를 부풀려 수있는 경우에. 나는 또한 사이에서 선택해야 할 것 R.id.meta_mic_button_frame 등등.)

2) 세로 모드와 가로 모드를 전환 할 때 res/layout 폴더와 res/layout_land 폴더에서 다른 XML 레이아웃을 정의해야합니다. (또는 가로 모드를 기본으로 고려하려면 res/layout 및 res/layout_port를 만들 수 있습니다.) 이 링크를 확인하십시오 : http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources 화면 크기, 언어, 도크 모드, 야간 모드 및 그 조합에 따라 다른 레이아웃을 정의 할 수 있습니다.