基本上我的问题是有点“易”:
我在景观这款平板布局:平板电脑布局,改变取决于屏幕方向错误
并希望改变布局,如果用户旋转平板电脑进入人像模式,这种布局:
在第一个景观中,Ui显示一次显示两个片段,左侧为Fragment1
,右侧为Fragment2
。 Fragment2
的容器是ViewPager
,其中还包含Fragment3
。用户可以看到Fragment3
,或点击ActionBar
中的选项卡。
在第二个人像,布局的Ui显示全部三个Fragment
s,ViewPager
被删除,标签也是,因为它们是不必要的。
我创造的景观布局,我的MainActivity这样的:
// 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);
在刷卡和一些更复杂的东西这两个片段之间的ViewPager
开关,像在运行时与其他Fragment
小号取代Fragment2
(用于导航)。
到目前为止,一切都很好,我对纵向布局的代码是相似的:
// 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_land
和R.layout.main_tablet_port
在layout-lard-land
和layout-large-port
中。
我实际的问题是不显示,这个工作,我的问题是方向变化,我得到这个异常:java.lang.IllegalStateException: Can't change container ID of fragment Fragment3
我推翻onConfiguratioChange
并试图setContentView(layout)
重新应用布局和调用该方法的布局(第一个代码块)和tablet_port
(第二个块)。 (还有更多..)
任何想法如何避免这种情况?
编辑:没有想法?