80,351
社区成员
发帖
与我相关
我的任务
分享
public void switchContent(Fragment from, Fragment to) {
if (mContent != to) {
mContent = to;
FragmentTransaction transaction = mFragmentMan.beginTransaction().setCustomAnimations(
android.R.anim.fade_in, R.anim.slide_out);
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(from).add(R.id.content_frame, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
}
}
private Fragment mContent = new Fragment();
1.先定义一个Fragment,类似这个:
[code=java]
public class HomeFragment extends BaseFragment{
public HomeFragment() {
Log.e("","HomeFragment>>>>");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
rootView = inflater.inflate(R.layout.fragment_home, null);
return rootView;
}
}
2.在一个Activity中实现Fargment的替换(这样就可以把Fragment的内容实例到Avtivity上):
@Override
void initView() {
setContentView(R.layout.activity_home);
home = new HomeFragment();
changeFragment(home, true);
}
protected void changeFragment(Fragment fragment, boolean or){
FragmentTransaction t = this.fragmentManager.beginTransaction();
t.replace(R.id.container, fragment);
if(!or){
t.addToBackStack(null);
}
t.commit();
}
3.实现不同Fragment的切换:
简单一点就是,重复上面step2,的逻辑代码,重新commit Fragment,就可以了。
从性能和OOP来看,可以类似这样写,你自己改改:
public void screenChange(int screenId, boolean isBack) {
switch (screenId) {
case BaseFragment.HOME:
if (isBack) {
pop();
} else {
home = new HomeFragment();
home.setScreenChangeListener(screenChangeListener);
home.setDeviceDataCallback(deviceDataCallback);
home.setRightInfoView();
changeFragment(home, true);
}
break;
case BaseFragment.CONTROL:
if (isBack) {
pop();
} else {
control = new ControlFragment();
control.setScreenChangeListener(screenChangeListener);
changeFragment(control, false);
}
break;
default:
break;
}
4.切换Fragment有动画时,所谓流畅切换,这段代码是定义动画的。
FragmentTransaction transaction = mFragmentMan.beginTransaction().setCustomAnimations(
android.R.anim.fade_in, R.anim.slide_out);
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(from).add(R.id.content_frame, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
不知道,我说的可明白,希望对你有用!