Activity中使用Fragment笔记

本文详细介绍了Activity中添加Fragment的三种方式,包括XML布局、动态添加和使用TabLayout+ViewPager。讨论了Fragment内部数据的保存与恢复,特别是在ViewPager中延时加载数据的策略。此外,还提到了在Fragment中使用子Fragment的问题,以及如何在Fragment中正确获取Activity。文章强调了不同场景下选择合适Fragment管理方式的重要性,以及在不同Android版本中处理onActivityResult回调的注意事项。
摘要由CSDN通过智能技术生成

一 Activity中添加Fragment方式

(1)Xml布局文件添加,如下
<fragment
    android:id="@+id/fragment"
    android:name="xxx.xxx.MyFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
(2)View中动态添加
Fragment fragment = getSupportFragmentManager().findFragmentByTag("tag");
if(fragment == null){
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    fragment = MyFragment.newInstance();
    transaction.add(R.id.fragment_container, fragment, "tag");
    transaction.commit();
}

Fragment fragment = null;
if(savedInstanceState == null){
    fragment = MyFragment.newInstance();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(R.id.fragment_container, fragment, "tag");
    transaction.commit();
}else{
    fragment = getSupportFragmentManager().findFragmentByTag("tag");
}

之所以在添加Fragment前判断是否有存在相同的Fragment,是因为在内存不足或横竖屏切换(如未在android:configChanges设置)时,会保存其内的Fragment状态信息。当Activity被创建显示时,Fragment会被自动恢复(恢复Fragment和状态的代码在Fragment Activity的onCreate方法中)。如果不判断,则添加多个相同的Fragment。
在添加Fragment时,如果需要向其传递一些初始化的参数,则可使用Bundle来传递。在Fragment内使用getArguments()获取参数。代码如下:

//------ 传递参数 ------
Bundle data = new Bundle();
//除了基本数据类型的值,还可以传递序列化和实现Parcelable类型的数据
data.putString(key, value);
...
fragment.setArguments(data);

//------ 获取参数 ------
Bundle data = getArguments();
if(data != null){
    //获取参数
    String value = data.getString(key);
    ...
}
(3)使用TabLayout和ViewPager添加

在布局文件添加:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="40dp" />

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值