详解Android中Fragment的两种创建方式

一、Fragment的概述

Fragment是Android中的一种UI组件,可以被称为“Activity的子Activity”,因为一个Activity可以有多个Fragment,Fragment可以嵌套在Activity的布局中,且可以动态加载、替换、添加、删除等操作。

二、Fragment的创建方式

在Android中,Fragment有两种创建方式:静态创建方式和动态创建方式。

1. 静态创建方式

静态创建方式即在xml布局中直接定义Fragment,可以在Activity的xml布局文件中通过标签定义:

<fragment
    android:name="com.example.fragmentdemo.Fragment1"
    android:id="@+id/fragment1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

其中,android:name属性指定Fragment的类名,android:id属性用于在Java代码中找到这个Fragment,其他属性用于指定布局大小、位置等。

2. 动态创建方式

动态创建方式是指通过Java代码动态创建Fragment,一般需要在Activity的onCreate()方法中调用FragmentManager的方式来实现。

创建步骤如下:

  1. 创建Fragment类
  2. 创建Fragment的布局文件
  3. 在Activity中创建FragmentManager对象
  4. 创建FragmentTransaction对象
  5. 绑定Fragment和布局文件
  6. 提交FragmentTransaction

示例1:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Fragment1 fragment1 = new Fragment1();
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.fragment_container, fragment1);
        transaction.commit();
    }
}

在这个示例中,我们首先创建了一个Fragment1的对象,然后获取Activity的FragmentManager对象,创建FragmentTransaction对象,接着我们绑定了Fragment1和布局文件,最后提交了Transaction。

3. Fragment的生命周期

关于Fragment生命周期,大家可以参考官方文档,这里不再展开说明。

三、总结

本文介绍了Android中Fragment的两种创建方式,分别是静态创建方式和动态创建方式,介绍了它们的使用方法以及示例代码,并提供了对应的布局文件。当然,我们也简述了Fragment的生命周期。

示例2:

public class MainActivity extends AppCompatActivity {
    Fragment2 fragment2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragment2 = Fragment2.newInstance("fragment参数");
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.fragment_container, fragment2);
        transaction.commit();
    }

    /**
     * 通过接口回调获取fragment2的参数值
     * @param str
     */
    public void getValueFromFragment(String str){
        Toast.makeText(this, "来自Fragment的参数值:"+str, Toast.LENGTH_SHORT).show();
    }
}

public class Fragment2 extends Fragment {
    private static final String ARG_PARAM = "param";
    private String mParam;

    private OnFragmentInteractionListener mListener;

    public Fragment2() {
        // Required empty public constructor
    }

    public static Fragment2 newInstance(String param) {
        Fragment2 fragment = new Fragment2();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM, param);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam = getArguments().getString(ARG_PARAM);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_fragment2, container, false);
        TextView textView = view.findViewById(R.id.tv_frag);
        textView.setText(mParam);

        Button button = view.findViewById(R.id.btn_to_activity);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mListener!=null){
                    mListener.onFragmentInteraction("来自Fragment的参数值:动态创建+接口回调");
                }
            }
        });

        return view;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        void onFragmentInteraction(String str);
    }
}

在这个示例中,我们通过newInstance()方法传递了fragment的参数,然后我们在Fragment中动态的显示该参数,此外我们还通过interface定义了一个接口回调,将fragment的参数值传回到了Activity中。

以上就是关于Android中Fragment的两种创建方式详细讲解,希望对大家了解Fragment有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Android中Fragment的两种创建方式 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 浅谈Linux文件目录介绍及文件颜色区别

    浅谈Linux文件目录介绍及文件颜色区别 Linux操作系统采用了树形结构来管理文件和目录,这一结构称为文件系统。Linux的文件系统被组织成一颗以根目录(/)为顶级节点的树。在Linux系统中,对文件和目录的访问和操作是通过在树形结构中导航、查找和选择所需文件和目录来完成的。本文将介绍Linux文件系统中常用的文件目录及其作用,并解释不同文件颜色代表的意义…

    other 2023年6月26日
    00
  • mybatis plus 关联数据库排除不必要字段方式

    MyBatis Plus 是一款优秀的 ORM 框架,在实际的开发过程中,经常需要使用到关联查询。然而,在关联查询时,我们经常会遇到一些不必要的字段被查询出来,如何排除掉这些不必要的字段呢? MyBatis Plus 提供了 @TableField 注解和 select 属性来解决这个问题。以下是详细的使用攻略: @TableField 注解的使用 在实体类…

    other 2023年6月25日
    00
  • windows下mongodb集群搭建

    在Windows下搭建MongoDB集群需要进行以下步骤: 下载MongoDB安装包并安装 配置MongoDB的配置文件 启动MongoDB节点 初始化MongoDB集群 添加MongoDB节点 验证MongoDB集群是否正常工作 下面将详细介绍每个步骤,并提供两个示例说明。 1. 下载MongoDB安装包并安装 首先需要从MongoDB官网下载Window…

    other 2023年5月5日
    00
  • ajaxControlToolkit AutoCompleteExtender的用法

    首先,在使用AjaxControlToolkit中的AutoCompleteExtender之前,需要确保已经安装并引用了AjaxControlToolkit。可以通过NuGet Package Manager来安装: Install-Package AjaxControlToolkit 安装完成后,在页面中引入AjaxControlToolkit: &lt…

    other 2023年6月26日
    00
  • D3.js学习笔记(四)—— 使用SVG坐标空间

    D3.js学习笔记(四)—— 使用SVG坐标空间 在D3.js学习笔记(三)—— 数据绑定和数据驱动的图表制作中,我们学习了如何使用D3.js进行数据绑定和数据驱动的图表制作。而在本篇文章中,我们将继续深入探索D3.js的使用,学习如何使用SVG坐标空间。 什么是SVG坐标空间 SVG是一种基于XML的图像标准,通过描述二维图形,实现了分辨率无限高、缩放不失…

    其他 2023年3月28日
    00
  • 通过恢复注册表键值解决Win7/Win8.1右键菜单的新建丢失问题

    首先我们需要了解一下注册表(Registry),注册表是Windows操作系统中的一个重要组成部分,它存储了Windows系统的所有配置信息。当系统启动时,Windows会读取注册表中的配置信息并执行相应的操作。 在Windows中,右键菜单是一个非常常用且实用的功能,但有时可能会出现右键菜单上的“新建”选项丢失的情况。这种情况通常是由于某些系统错误所致,但…

    other 2023年6月27日
    00
  • ios10.1 beta2固件下载 iOS 10.1开发者beta2全机型固件及描述文件下载地址

    以下是完整的攻略: iOS 10.1 beta2固件下载 介绍 iOS 10.1是苹果公司发布的最新操作系统版本。通过下载和安装iOS 10.1 beta2固件,你可以第一时间体验到最新的功能和性能提升。这篇攻略将会介绍如何下载和安装iOS 10.1 beta2固件以及描述文件。 步骤 1. 注册开发者账号 首先,你需要注册开发者账号。你可以访问苹果的开发者…

    other 2023年6月26日
    00
  • 学习ExtJS(二) Button常用方法

    学习ExtJS(二)Button常用方法攻略 1. Button常用方法概述 在ExtJS中,Button是常用的UI组件之一,用于触发特定的操作或事件。本攻略将详细介绍Button的常用方法,包括创建Button、设置文本、禁用/启用Button、添加点击事件等。 2. 创建Button 要创建一个Button,可以使用Ext.button.Button类…

    other 2023年8月6日
    00
合作推广
合作推广
分享本页
返回顶部