demo1:获取屏幕的状态 ,横屏与竖屏自动切换fragment
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取屏幕的宽度和高度 适配不同的fragment
DisplayMetrics outMetrics=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
int width=outMetrics.widthPixels;
int height=outMetrics.heightPixels;
RelativeLayout layout=(RelativeLayout)findViewById(R.id.layoutId);
//要借助此对象管理fragment对象
FragmentManager fm= getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
//使用不同的fragment
if(height>width){
ft.replace(R.id.layoutId, new Fragment01(),"tag");
}else{
ft.replace(R.id.layoutId, new Fragment02(),"tag");
}
//可选:将fragment添加到回退栈
//ft.addToBackStack(null);
ft.commit();
}
@Override
protected void onResume() {
super.onResume();
//根据tag找到对应的fragment
Fragment f=getFragmentManager().findFragmentByTag("tag");
Log.i("TAG", "f="+f);
}
}
demo2:Tab+fragment 实现屏幕旋转保存数据
public class MainActivity extends Activity {
ActionBar bar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar=getActionBar();
bar.setDisplayShowHomeEnabled(false);
bar.setDisplayShowTitleEnabled(false);
//设置为tab导航
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//添加tab
bar.addTab(bar.newTab().setText("tab01").setTabListener(
new MyTabListener(this,Fragment01.class.getName(),"A")));
bar.addTab(bar.newTab().setText("tab02").setTabListener(
new MyTabListener(this,Fragment02.class.getName(),"B")));
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState!=null){
int pos=savedInstanceState.getInt("posKey");
bar.setSelectedNavigationItem(pos);
}
}
private class MyTabListener implements TabListener{
private Context context;
private String className;
private Fragment frg;
private String tag;
public MyTabListener(Context context,String className,String tag){
this.context=context;
this.className=className;
this.tag=tag;
//检测在当前activity是否已经有存在的fragment
Fragment frg=getFragmentManager().findFragmentByTag(tag);
if(frg!=null&&!frg.isDetached()){
FragmentTransaction beginTransaction = getFragmentManager().beginTransaction();
beginTransaction.detach(frg);
beginTransaction.commit();
}
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if(frg==null){
frg=Fragment.instantiate(context, className);
ft.add(R.id.layout,frg,tag);
}else{
ft.attach(frg);
}
}
//没有选中的那个在旋转需要解除关联
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if(frg!=null){
ft.detach(frg);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
int pos=bar.getSelectedTab().getPosition();
outState.putInt("posKey", pos);
}
}