两个fragment的跳转

两个fragment的跳转不能使用startActivity,必须使用一下方法,fragment的跳转实际上就是在当前页面杀死当前的fragmetn,加载另一个fragment。

http://www.cnblogs.com/tittles0k/p/5864623.html


代码:

//                        android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
//                        Fragment fragment = new CategoryFragment();
//                        fm.beginTransaction().replace(R.id.realtabcontent,fragment).commit();

repleace()中的第一个容器,为fragmentlayout的id,如以下代码中的fragmentlayout

<?xml version="1.0" encoding="utf-8"?>
<!--这个layout用于FragmentTabHost的布局-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<!--backgrounf在style中修改背景颜色,minheight是最小高度-->


    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        />

<android.support.v4.app.FragmentTabHost
    android:id="@android:id/tabhost"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="0" />

</android.support.v4.app.FragmentTabHost>

<!--dip和dp是一样的,不同设备有不同的显示效果,这个和设备硬件有关-->


</LinearLayout>

### Android 中 Fragment 之间跳转的实现 在 Android 开发中,Fragment 之间跳转可以通过 `FragmentManager` 和 `FragmentTransaction` 来完成。下面是一个完整的例子来展示如何在一个 Activity 内部的不同 Fragment 间进行导航。 #### 使用 `FragmentManager` 进行基本的 Fragment 替换操作 为了替换现有的 Fragment 或者添加新的 Fragment 到容器视图中,可以使用如下方式: ```java // 获取FragmentManager实例并开启事务 FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); // 将目标Fragment加入到指定id的布局容器内 transaction.replace(R.id.fragment_container, new TargetFragment()); // 添加回退栈以便用户能够通过Back按钮返回上一状态 transaction.addToBackStack(null); // 提交更改 transaction.commit(); ``` 上述代码展示了最基础的方式来进行两个 Fragments 的转换[^1]。 #### 处理复杂的嵌套 Fragment 场景 当涉及到更深层次的 Fragment 结构时(即一个 Fragment 下面还有子 Fragment),则需要特别注意管理这些内部组件的状态以及生命周期事件。此时应该利用 `getChildFragmentManager()` 方法而不是全局的 `getSupportFragmentManager()` 来获取适用于当前上下文环境下的 Manager 对象[^4]。 例如,在父级 Fragment 中执行子 Fragment 的更换动作可参照以下做法: ```java public class ParentFragment extends Fragment { public void changePage(Fragment targetFragment){ // 注意这里用了 getChildFragmentManager() FragmentTransaction tran = getChildFragmentManager().beginTransaction(); tran.setCustomAnimations( R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right); tran.replace(R.id.child_fragment_container, targetFragment).commitAllowingStateLoss(); } } ``` 此段代码说明了怎样在一个已经存在的 Fragment 内创建另一个 Fragment 并对其进行控制。 #### 解决常见问题 为了避免因多次快速点击或其他原因造成的重复加载现象,可以在启动新 Fragment 前先检查它是否已经在堆栈里存在;另外也可以考虑采用懒加载模式减少不必要的资源消耗[^2]。 对于性能敏感的应用程序来说,优化 Fragment 加载过程非常重要。比如针对含有大量数据渲染需求的情况,建议推迟实际的数据抓取直到该页面确实可见给用户的那一刻再做处理——这可通过覆盖 `setUserVisibleHint(boolean isVisibleToUser)` 函数达成目的[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值