文章目录

  • 1、简介
  • 2、fragment 基本概念
  • 3、创建一个简单的Fragment实例
  • 1)静态载入 fragment
  • 4、动态加载示例
  • 5、fragment 获取 当前依附的 activity 数据
  • 1)fragment 获取 activity 对象
  • 2)fragment 获取activity 里面的变量
  • 3)fragment 获取activity 里的组件对象
  • 6、activity 获取 fragment 里的对象
  • 1) activity 获取 fragment 变量信息
  • 7、fragment 获取 fragment 的数据对象
  • 1)fargmentOne 跳转 fragementTwo 传递数据


1、简介

详细介绍 Fragmen 使用

2、fragment 基本概念

Fragment ,简称碎片,是Android 3.0(API 11) 提出的,为了兼容低版本,support-v4库中也开发出了一套Fragment API,最低兼容Android 1.6.

过去support-v4库是一个jar包,24.2.0版本之后开始,将support-v4库模块化,为多个jar包。
包含:support-fragment, support-ui, support-media-compat等,这么做是为了减少apk包大小。需要使用哪个模块就引用哪个模块。

例如我们想引入整个support-v4库,则 compile ‘com.android.support:support-v4:24.2.1’,
如果只是想引入 support-fragment库,则 com.android.support:support-fragment:24.2.1

1)Fragment是依赖于Activity的,不能独立存在的。
2)一个Activity里可以有多个Fragment。
3)一个Fragment可以被多个Activity重用。
4)Fragment有自己的生命周期,并能接收输入事件。
5)我们能在Activity运行时动态地添加或删除Fragment。

3、创建一个简单的Fragment实例
1)静态载入 fragment

Fragment简单实例-------静态加载

静态加载不可再改变Fragment 的显示隐藏等等。

我们可以看到是通过在 xml 布局文件里面通过 :
android:name= “” 来加载自己的 fragment,

<fragment
        android:id="@+id/fargment_id"
        android:name="com.example.menglux.fragmentstatic.FragmentButton"   **// 在 布局文件里 加载自定义的 FragmentButton**  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:layout_gravity="center"/>
4、动态加载示例

加载思路:

  1. 主main.xml 里添加一个占位的 区域布局 layout
    2)绘制另一个想要实现fragment 的布局文件 fragment.xml
    3)将布局文件 fragment.xml 和自己定义的 fragment.java文件绑定在一起
    4)将主文件main.java 中 通过 fragmentManager 管理器对 fragment.java 对象进行管理

Fragment简单实例-------动态加载

5、fragment 获取 当前依附的 activity 数据
1)fragment 获取 activity 对象

直接使用 getActivity() 就可以获取所依附的 activity

2)fragment 获取activity 里面的变量

比如 MainActivity.java 定义一个 变量

public String  testStr = "Hello";

在 MyFragment.java 里获取,

String  str = ((MainActivity) getActivity()).testStr;
        Log.i(TAG,str);
3)fragment 获取activity 里的组件对象

(1) activity_main.xml 里面定义一个TextView 组件

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text_id"
        android:text="Fragment Test"
        android:textColor="@color/colorAccent"
        android:textSize="40dp"/>

(2) MainActivity.java 里获取组件并初始化

TextView textView = (TextView) findViewById(R.id.text_id);
        textView.setText("activity  set Value");

(3) Fragment.java 里获取组件并且设置新数据

MainActivity activity = (MainActivity) getActivity();
                textView = (TextView) activity.findViewById(R.id.text_id);
                textView.setText("fragment get activity TextView");

Android Fragment 知识概要_java

6、activity 获取 fragment 里的对象
1) activity 获取 fragment 变量信息

(1) MyFragment.java 中定义变量

public String fragmentStr = "FragmentTest";

(2)MainActivity.java 文件里获取

实例化 Fragment 对象进行获取

MyFragment fragmentOne = new MyFragment();
                System.out.println("lum: " + fragmentOne.fragmentStr);
7、fragment 获取 fragment 的数据对象
1)fargmentOne 跳转 fragementTwo 传递数据

(1) fragmentOne 通过 bundle 传递数据

FragmentTwo fragmentTwo = new FragmentTwo();
                Bundle bundle = new Bundle();
                bundle.putString("name", "lum");
                fragmentTwo.setArguments(bundle);
                fragmentTransaction.replace(R.id.fragment_id,fragmentTwo);  //加载第二个 fragment

(2)FragmentTwo.java 在 onCreate()方法里进行接收

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle bundle = getArguments();
        String name = bundle.getString("name");
        System.out.println("get name: " + name);
    }

文件参考:
Android Fragment 非常详细的一篇
https://www.jianshu.com/p/11c8ced79193