您的位置:首页 > 其它

hide和show方法实现fragment切换且不重新实例化

2016-12-07 17:22 411 查看
Fragmnet在开发中用的比较多,常见的有两种切换方式。一种是replace方式,就是重新创建fragment替换掉之前的fragment。这种方式会重新实例化走生命周期,会刷新界面的数据。但是,这样会有一个问题:每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量。另一种是通过hide和show方式来实现切换,通过这种方式能保留状态,能避免重新实例化而带来的“重新加载一边数据”、“消耗数据流量”的问题。下面介绍一下通过hide和show方法实现fragment切换且不重新实例化。

ps:不是说hide和show方式好,一定要用这种,选择哪种切换方式需要根据项目需求和实际情况。

下面上代码:

/**
*
* @param from  当前的
*
* @param to 要显示的
*
*/
public void switchContent(Fragment from, Fragment to) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
if (fromFragment == null) {
transaction.add(R.id.contactContent, to).commit();
fromFragment = to;
} else if (fromFragment != to) {
fromFragment = to;
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(from).add(R.id.contactContent, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
}
}


然后直接在onCreate()里调用
public class MainActivity extends Activity {
private Fragment fromFragment;
private Fragment myFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(myFragment==null){
myFragment=new Fragment();
}
switchContent(fromFragment, myFragment);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: