创建一个Fragment
如果要创建一个Fragment,必须创建一个Fragment的子类(或者已经存在的子类)。一个Fragment看起来像一个activity。它包括和activity相似的回调方法,例如 onCreate()
, onStart()
, onPause()
, and onStop()。
实时上,如果你要使用fragment转化一个已经存在的Android应用,你也许只要简单的将activity中回调函数中的代码复制到fragment的回调方法中。
一般情况下,你应该实现至少以下几种方法:
创建fragment的时候系统会调用这个方法。在你的实现中,你可以进行一些初始化工作。
当fragment首次要draw 他自己的用户界面的时候,系统会调用这个方法。这个方法必须返回一个 View,这个veiw也就是fragment的根布局。如果这个fragment不提供UI,你可以返回null。
当用户离开这个fragment的时候,会首先调用这个方法。
一般情况下大多数程序都会实现这三个方法,但是还有几个其他的回调方法,他们用来处理fragment生命周期的各个阶段。
当然,你也可以继承一些Fragment已经存在的子类来代替继承Fragment类:
- 添加一个用户界面
为fragment供一个布局,你必须实现onCreateView() 回调方法,当fragment要显示界面的时候会调用这个方法,然后这个方法必须返回一个View对象。
如果你的fragment是 ListFragment 的子类,onCreatView()默认情况下会返回一个
ListView
类的对象,所以,你没有必要去实现它。
例子:
public static class ExampleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.example_fragment, container, false); } }
这有有一点需要说明的,那就是inflate(int resource, ViewGroup root, boolean attachToRoot)方法的三个参数。
- 第一个参数代表的是一个资源的id,也就是代表你即将inflate的资源文件。
- 第二个参数是你需要将inflate的视图添加到的Viewgroup,在上面的例子中是把R.layout.example_fragment inflate后代表的视图添加到container中。
- 第三个参数表示是否把inflate的视图添加到container中,如果是false,代表不添加到container中,只是返回一个视图和视图的layoutparams,如果是true,代表会添加到container中去。
- 添加一个Fragment到activity中
一般情况下,一个fragment为一个activity贡献了一部风UI,他会嵌入一个activity中作为其中的一部分。有两种方法江一个fragment添加到一个activity中:
在activity的layout文件中声明fragment
在这种情况下,你可以为这个fragment指定布局属性,就像一个普通的view一样。例如:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="com.example.news.ArticleListFragment" android:id="@+id/list" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="com.example.news.ArticleReaderFragment" android:id="@+id/viewer" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
通过代码方式添加fragment
在你activity运行的任何时间内,你可以添加fragments到你的activity的布局中,你只需要指定一个 ViewGroup
用来放置fragment。
为了在activity中进行事务管理(例如 add,remove,or replace 一个fragment),你必须使用FragmentTransaction.你可以从activity中获取一个 FragmentTransaction
的实例,例如:
FragmentManager fragmentManager = getFragmentManager() FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
然后你就可以使用 add()
方法,添加一个fragment到一个activity布局中。
ExampleFragment fragment = new ExampleFragment(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit();
- 添加一个没有UI的fragment
上面的例子展示了如何江一个fragment的界面添加到activity的布局中。但是,你也可以使用一个后台的fragment,也就是说他没有界面。
添加一个没有UI的fragment会使用add(Fragment, String) 方法,因为他不是一个界面。所以只能是用tag作为唯一标识。
- 管理fragments
在activity中管理fragments,你需要用到FragmentManager. ,在activity中通过getFragmentManager()来获取它。
通过FragmentManager. 你可以做的事情包括:
- 获取activity中包含的fragments,通过方法
findFragmentById()
或者findFragmentByTag()
- 使用popBackStack (),使Fragmnet出栈操作,类似用户按回退键。
- 注册一个back Stack change事件监听,方法为addOnBackStackChangedListener().
- Fragment事务
在你的activity中,你可以增加、移除、替换fragment。你提交的没一组变换都叫一个事务(transaction),你需要用到 FragmentTransaction
. 你还可以保存每一个事务到一个栈中,这个栈是于activity管理的。你可以从FragmentManager中获取一个 FragmentTransaction
的实例,例如:
FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
每个事务就是你想同时进行的一系列的变化,你可以进行所有你想进行的变化,例如 add()
, remove()
, and replace()
.完成以后你必须调用commit().来提交事务。证明这个事务完成。
在你调用commit()方法前,你可以调用addToBackStack(), 目的是把这个事务添加到一个栈中。这个栈是有activity来管理的,他允许你返回上一个fragmeng的状态,你只要按返回按钮就可以。
- 和activity进行交互
虽然Fragment是不依赖activity而独立实现的,并且可以在多个activity中使用,但是,一个Fragment的对象还是和包含他的actvity有绑定关系的。
特别需要指出的就是,fragment可以通过 getActivity()
来访问activity实例,并很容易执行一些操作,例如查找一个视图在activity的layout中:
View listView = getActivity().findViewById(R.id.list);
同样,你的activity也可以通过FragmentManager 的 findFragmentById()
or findFragmentByTag()
. 来获取一个Fragment对象,例如:
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
actvity向Fragment传递数据:
activity像Fragment传递数据的方法通过在Actvity中创建Bundle数据包,并调用Fragment的setArguments方法即可将数据传递给Fragment,例如:
FragmentB fragmentB = new FragmentB(); Bundle bundle = new Bundle(); bundle.putString("fragmentTest", "the data is passed in by activity"); fragmentB.setArguments(bundle); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.add(R.id.ln1,fragmentB, "fragmentB"); transaction.commit();
在Fragment中,就可以调用getArguments()获取参数。
Fragment向activity传递参数
在fragement中定义一个回调接口,再让包含Fragment的activity实现该接口,这样Fragment即可以调用该回调方法将数据传递给activity。
相关推荐
一、Android Fragment 的基础知识介绍 1.1 概述 1.2 范例 二、Android Fragment 示例讲解一 2.1 创建 Fragment 2.2 Fragment 管理 2.3 Fragment 与 Activity 通讯 2.4 Fragment 示例 三、Android ...
一、Android Fragment 的基础知识介绍 1.1 概述 1.2 范例 二、Android Fragment示例讲解一 2.1 创建Fragment 2.2 Fragment 管理 2.3 Fragment 与Activity 通讯 2.4 Fragment 示例 三、Android Fragment示例讲解...
- `AndroidFragment.zip`可能包含一个基础的Android Fragment项目,用于学习Fragment的基础用法和实践。 7. **Fragment在不同版本上的兼容性**: - 从Android 3.0(API级别11)开始引入Fragment,但通过Android ...
本文主要供学习使用,主要讲解点击不同按钮之后,相应Fragment之间的切换。类似的这种实例,在开发中经常用到,网上也有很多比较好的开源Demo,写的很详细。我当时也是用过其中的某些...为以后更复杂的开发打好基础。
本示例"android fragment超简单使用demo"专注于Fragment的基础使用,旨在帮助开发者快速理解并掌握Fragment的核心概念。 首先,Fragment并不是独立的Activity,而是作为Activity的一部分存在,它可以嵌入到Activity...
在"BasicFragment"这个子文件中,我们可以预期看到一个基础的Fragment实现。通常,一个Fragment会包含以下部分: 1. **Fragment类定义**:Fragment的类继承自android.app.Fragment或androidx.fragment.app.Fragment...
标题“android Fragment最简单的例子”暗示我们将探讨一个基础的Fragment使用案例,这个例子可以帮助初学者快速理解Fragment的工作原理和基本用法。 首先,Fragment是Android应用程序中UI的一部分,它可以独立于...
综上所述,这个"Androidfragment结合viewpager的滑动与点击"示例涵盖了Android开发中多个重要领域,通过实践这个项目,开发者可以深入理解如何将Fragment和ViewPager协同工作,以及如何处理XML数据、SQLite数据库和...
在Android应用开发中,Fragment是Android ...在实际项目中,你可能还需要考虑更多细节,如数据传递、Fragment间的通信等问题,但这个基础结构将为你提供一个良好的起点。记得在实践中不断调整和优化,以提高用户体验。
在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以独立于Activity存在,并且可以在多个屏幕配置下灵活展示。本Demo重点展示了如何利用Fragment配合限定符进行屏幕适配,特别是针对不同尺寸的设备,...
其中,使用Interface是最基础的方法,而使用ViewModel则是Android推荐的现代架构组件方式,因为它提供了生命周期感知能力,使得数据在Fragment重建时不会丢失。 5. **横竖屏切换处理**:在Android中,屏幕方向改变...
理解这些生命周期方法的调用顺序和应用场景是正确管理Fragment的基础。 二、动态加载Fragment 1. 使用FragmentManager:通过FragmentManager的beginTransaction()方法创建一个Transaction对象,然后调用其add(), ...
登录注册等都是用Android内置的小型数据库,登录进去是Fragment页面,底部也有动态的变化,是通过WIFI将传感器获取的数据动态的加载进内置数据库中,然后使用了ListView动态数据加载也可以通过App控制传感器的变化等...
总之,这个项目为我们提供了一个学习和实践Fragment的平台,涵盖了从基础用法到复杂场景的实现,对于理解和掌握Android应用开发中的Fragment管理至关重要。通过分析和运行项目中的代码,我们可以深入理解Fragment的...
在Android开发中,Fragment是一个非常重要的组件,它允许开发者在Activity中分割用户界面,使得UI设计更加灵活,尤其适用于处理不同屏幕尺寸和分辨率的问题。Fragment的设计理念是将UI的某个功能部分封装起来,使其...
首先,我们来探讨Fragment的基础知识。Fragment是Android 3.0(API级别11)引入的,目的是为了更好地支持大屏幕设备,如平板电脑,但同时也适用于手机。Fragment有自己的生命周期,包括onCreate(), onCreateView(), ...
综上所述,这个项目展示了Android应用的基础架构和常见功能实现,对于初学者来说是个很好的学习案例。开发者通过掌握闪屏页、登录、Fragment和页面跳转等技术,可以构建出功能完善的移动应用。同时,良好的代码组织...
在Android应用开发中,XML常用于传输和存储结构化数据,而HTTP协议是网络通信的基础,用于客户端与服务器之间的数据交换。在这个项目中,我们关注的是如何在Android应用中使用XML解析器获取网络数据,结合Fragment...
在Android开发中,Fragment是应用程序界面的一个可重用组件,它允许我们把用户界面分割成独立的部分,每个部分有自己的生命周期和交互逻辑。Fragment最初在Android 3.0(API级别11)引入,目的是为了更好地支持平板...
这篇博客将深入探讨ViewPager与Fragment的基础用法。 **一、ViewPager简介** ViewPager是Android Support Library中的组件,它主要用于实现屏幕间的滑动切换效果。通过适配器(PagerAdapter)提供数据,ViewPager会...