1

기본적으로 내 질문에 좀 "쉬운"입니다 : 나는
풍경이 태블릿 레이아웃이 있습니다태블릿 레이아웃 변경은 화면 방향 오류에 따라

Tablet Layout Landscape

및 레이아웃 경우를 변경하려면 사용자는이 레이아웃에, 세로 모드로 태블릿을 회전 :

Tablet Layout Portrait

첫 번째, 풍경, 레이아웃에서 Ui는 한 번에 두 조각을 보여줍니다. 오른쪽에는 Fragment1이고 Fragment2입니다. Fragment2의 컨테이너는 ViewPager이며 Fragment3도 포함되어 있습니다. Fragment3은 사용자가 스 와이프 한 것을 보거나 ActionBar의 탭을 클릭합니다.

두 번째, 인물, 레이아웃 Ui는 세 번 모두 Fragment을 표시하고, ViewPager은 불필요하므로 탭도 제거됩니다.

내가 이렇게 내 MainActivity에 가로 레이아웃과 creat :

// ActionBar Stuff 
    mActionbar = getSupportActionBar(); 
    mActionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    mActionbar.setHomeButtonEnabled(false); 

    // Swipe Stuff 
    mAdapter = new FragmentAdapter(fm); 
    mPager = (ViewPager) findViewById(R.id.viewpager); 
    mPager.setAdapter(mAdapter); 
    mPager.setOnPageChangeListener(this); 

    // Initialize Tabs 
    Tab1 = mActionbar.newTab().setText("Tab1"); 
    Tab2 = mActionbar.newTab().setText("Tab2"); 

    // Set Tab to Fragment // they're initialized here and accessed in the ViewPager (mPager) 
    Fragment1 = new FirstFragment(); 
    Fragment3 = new ThirdFragment(); 

    android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
    android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.fragment_one_container, Fragment1).commit(); 

    // //TabListener/////////////////////////// 
    Tab1.setTabListener(new TabsListener(mApp, 0 + "", mPager)); 
    Tab2.setTabListener(new TabsListener(mApp, 1 + "", mPager)); 

    // //Add Tabs////////////////////////////// 
    mActionbar.addTab(Tab1); 
    mActionbar.addTab(Tab2); 

탐색 (런타임에 다른 Fragment들과 Fragment2를 교체 같은 슬쩍에서 좀 더 복잡한 일에 두 조각 사이의 ViewPager 스위치,).

지금까지 모든 것이 괜찮습니다, 세로 레이아웃 내 코드가 비슷하다

// ActionBar Stuff 
    mActionbar = getSupportActionBar(); 
    mActionbar.setHomeButtonEnabled(false); 

    // Swipe Stuff 
    mAdapter = new FragmentAdapter(fm); 
    mPager = (ViewPager) findViewById(R.id.viewpager); 
    mPager.setAdapter(mAdapter); 
    mPager.setOnPageChangeListener(this); 

    // Set Tab to Fragment // they're initialized here and accessed in the ViewPager (mPager) 
    Fragment1 = new FirstFragment(); 
    Fragment3 = new ThirdFragment(); 

    android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
    android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.fragment_one_container, Fragment1); 
    ft.replace(R.id.fragment_three_container, Fragment3); 
    ft.commit(); 

ViewPager는 Fragment2의 컨테이너, 다른 컨테이너 위의 코드에 설명되어 있습니다.

레이아웃 파일 R.layout.main_tablet_landR.layout.main_tablet_portlayout-lard-landlayout-large-port입니다. java.lang.IllegalStateException: Can't change container ID of fragment Fragment3

내가 onConfiguratioChange를 오버라이드하고 setContentView(layout)와 레이아웃을 다시 적용 및 레이아웃에 대한 메소드를 호출하려고 :

내 실제 문제는 표시,이 작품, 내 문제는 방향 변경, 나는이 예외가되지 않는다 tablet_land (첫 번째 코드 블록) 및 tablet_port (두 번째 블록). (그리고 더 많은 ..)

어떤 생각을 피하는 방법?

편집 : 아이디어가 없습니까?

답변

1

두 패널 레이아웃에 대한 용기가있는 경우 fragment3을 취소 몇 가지 코드를 추가해야합니다 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_activity); 
    // fragment 3 trick 
    FragmentManager fm = getSupportFragmentManager(); 
    Fragment oldFragment3 = fm.findFragmentById(R.id.fragment_three_container); 
    View fragment3Container = findViewById(R.id.fragment_three_container); 
    if(null==fragment3Container && null!=oldFragment3){ 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.remove(oldFragment3); 
     ft.commit(); 
     fm.executePendingTransactions(); 
    } 
    // other stuff 
} 
:

그래서,이처럼 XXX_FragmentActivity에서 onCreate 방법을 다시 작성하려고하지