文章目录
- 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、动态加载示例
加载思路:
- 主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");
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