switchContent实现多个Fragment之间的流畅切换

MyVar 2015-03-19 10:47:43
我在APP中使用了多个Fragment,我希望在切换它们时能流畅进行,更何况我的应用还在Fragment中加载了地图!下面是我在网上找到的方法,但我还不是很明白,求大神解答一下~~有相关的demo就最好了!题主新手,大神勿喷,题主先谢谢各位了~

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,显示下一个
}
}
}

Q1、mContent该如何声明呢?直接这样吗?那我自己定义的多个Fragment又该声明在什么地方,在OnCreate()中全部都要声明吗?
private Fragment mContent = new Fragment();

Q2、如何设置第一个界面?因为第一次进入是没有其他Fragment来切换上一个的Fragment的,也就不能调用此函数。。。
...全文
273 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
budworm 2015-03-19
  • 打赏
  • 举报
回复
怎么感觉你上面那段滑动代码是我写的?

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,显示下一个
            }
不知道,我说的可明白,希望对你有用!

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧