AUF(Always Use Fragment)
【老习惯】:一直以来使用着Activity,也就是原生的Android项目最基本的形态,突然有一天打开一个开源project,在分类package里面看到了Fragment的分类,那么Fragment到底是干什么的呢,为什么面试官老问我Fragment和Activity的区别呢,那么我们今天通过一个例子来解惑,首先WHY?
【为什么使用】:UI灵活性,现在我们使用大部分app的时候,手动上下滑动或者是左右滑动便能加载出不同页面,这个似乎不是我们认知中Activity所能做到的事情,也不是繁杂的标签(TabHost)来做到的。
如下图:
这种UI的灵活性是怎么做到的呢,activity本身并不具有这样的灵活性,activity可以在运行时候进行切换,但是控制试图代码必须在activity里面实现,看起来就是用Intent跳转喽,那怎么受得了,我只是想切换view而已
那么这里一下layout布局可以根据手势来切换不同的view么,很可惜不可以,因为崩掉了,所以每个activity终究还是要和特定的用户界面牢牢绑定的。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_crime);
于是就有了fragment,可不可以在主布局函数里面放一个容器(container),容器里面可以放一个view,而这个view还是可以管理的呢?这样我不就是可以实现多个view的添加了么?good idea 当初想出Fragment的人肯定不是个天才,但是仍旧要说一声genius!!!,因为我们这些被苹果砸中的人却想不到,好吧,我只是吐槽我出生的太晚。。。。。。采用这样的方法就可以绕开Android系统activity规则的限制。
Activity比Fragment效率高。因为Activity可以单独使用,但是Fragment要放在Activity中去使用。
Fragment是为了解决同一款安卓软件不能在分辨率和不同屏幕的载体中使用的问题而产生的软件。可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。
【fragment对象理解】fragment对象就是一个控制器,activity可以委派它去完成一些任务,在中央集权制的Android世界里,你不要指望Activity这个Boss会事必躬亲,这种小事就交给小弟Fragment做就好啦,它来管理一些用户界面,这些用户界面可以是屏幕的一部分或者一整屏。一个Activity会有多个小弟fragment,同时对应着多个容器,招募人家需要给人家容身之所。因此就完成了我们对多个view的初步构想,接下来实战演练,一个非常简单的demo带你理解 Fragment的Construction结构
================================================================================
【创建】:CrimeActivity+主布局函数activity_crime.xml
xml不需要做太多,但是在招小弟Fragment之前,请把容身之处Container安置好,just like this:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragmentContainer" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".CrimeActivity" > </FrameLayout>
【物色小弟fragment】:现在我们开始物色小弟,首先我们创建一个Crime用来标识ID要知道每个android的ID是十分重要的,代码如下:
public class Crime { /* * UUID(Universally Unique Identifier)全局唯一标识符 * 是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的 */ private UUID mId; private String myTitle; public Crime() { // TODO Auto-generated constructor stub mId=UUID.randomUUID(); } public String getMyTitle() { return myTitle; } public void setMyTitle(String myTitle) { this.myTitle = myTitle; } }
接下来,重头戏:
【fragment】新建CrimeFragment类继承 Fragment
/* * author by ee */ public class CrimeFragment extends Fragment{ private Crime crime; private EditText myTitleField; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); crime=new Crime(); } public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle savedInstanceState){ //载入试图,采用Inflater View v=inflater.inflate(R.layout.fragment_crime,parent, false); //获取fragment布局函数输入框对象 myTitleField=(EditText)v.findViewById(R.id.crimetitle); //添加监听 myTitleField.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence c, int start, int before, int count) { // TODO Auto-generated method stub myTitleField.setText(c.toString()); } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable arg0) { // TODO Auto-generated method stub } }); return v; } }
那么fragment_crime也是非常简单明了了:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/crimetitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/crime_title_hint" android:ems="10" > <requestFocus /> </EditText> </LinearLayout>
hint是一个默认显示,但是用户输入时自动消失的提示语,相信大家都有遇到过,我们在string里面定义显示什么:
<string name="crime_title_hint">为此界面输入一个标题</string>
easy get!
【tips】发现为什么Activity :
protected void onCreate
而 Fragment是:
public void onCreate
一个是受保护的方法,一个是公共方法因为需要被托管Fragment的任何Activity调用,意思就是老大管着你吃穿拉撒,你还有什么秘密想要隐瞒着老大不成,老大想要用你的资源就赶紧乖乖献上来,解释虽然是这样解释,但是我们学过父类子类的时候对四个访问权限,公共public 秘密private ,保护protected,以及默认的,各自的权限都有了解过,所以真正原理是这样的。
================================================================================
【Activity】老大开始对愿意入会的小弟开始接收:
public class CrimeActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_crime); //FragmentManager管理器 FragmentManager fm=getFragmentManager(); Fragment fragment=fm.findFragmentById(R.id.fragmentContainer); if(fragment==null){ fragment=new CrimeFragment(); //FragmentManager管理器将调用 Transaction队列添加fragment到容器中 fm.beginTransaction().add(R.id.fragmentContainer, fragment) .commit(); } } }
每一个地盘绑定一个小弟。一一对应container和fragment
【实现效果】:这个时候运行app就可以吧Fragment内容显示出来了。大致上架构明白了吧
相关推荐
Fragment的最佳实践-一个简易版的新闻应用
Android Fragment的使用。...功能:用一个Activity来管理两个Fragment,并且在其中一个Fragment中,点击按钮,影响到第二个Fragment。Activity中用list来管理Fragment。fragment布局采用垂直排列。
1、从同一个Activiy的一个Fragment跳转到另外一个Fragment 2、从一个Activity的Fragment跳转到另外一个Activity 3、从一个Activity跳转到另外一个Activity的Fragment上 4、从一个Activity的Fragment跳转到另外一个...
androidx-fragment-1.1.0.aar
Demo结构 fragment_first.xml fragment_second.xml fragment_main.xml 效果图: 原创文章 2获赞 1访问量 119 关注 私信 展开阅读全文 作者:河边啃母鸡
activity与fragment以及fragment与fragment之间的通信
fragment回退,fragment之间相互跳转
fragment 与 fragment 通信 fragment 向 activity 传值 activity 向 fragment 传值 代码是自己手敲的
自己项目中用到fragment搭建框架,从网上找得一个demo,实现activity与fragment相互传值;fragment与fragment跳转。跟大家分享
关于Android fragment入门 源代码 源码笔记 包括全部工程文件
Fragment入门
实现了在Fragment中点击按钮,切换到另一个Fragment的界面。帮助理解Fragment的用法。
这是一个关于从一个activity跳到fragment,再从fragment跳到activity的页面之间的跳转!!!
例子主要包括Fragment与Activity之间的通信,代码中还给出了两者之间通信具体调用的函数及其顺序。
入门级的Fragment示例项目,分三示例,1,讲解加载两个Fragment, 2,讲解了动态加入Fragment,3,讲解了Fragment之间通信。
上一篇介绍了,Fragment从Activity获取数据。这篇介绍两个Fragment之间的如何获取数据。 MainActivity包含有两个Fragment,LeftFragment和RightFragment,如果Leftfragment想要获取RightFragment中的数据,那么首先...
其中,fragment与Activity通信就是一个。 fragment与Activity通信主要是两点: 1、fragment传递信息给Activity 此点是通过在fragment中定义接口与Activity共享数据。 2、Activity传递信息给fragment 此点主要是通过...
activity与fragment的传递和fragment与Fragment的传递
在开发过程中不可避免的会出现fragment与fragment,fragment与activity之间的通信交互问题。 本章讲述如何实现fragment与activity之间的通信。 一、APP构成 MainActivity+底部导航栏; 二、通信目的 MainActivity中...
当然这些Pager都是通过Fragment来实现的,适配器用的是FragmentStatePagerAdapter,我现在主要实现的功能是第二个Fragment2,上面有一个OK按钮,点击OK的时候第二个Fragment2会被替换成另一个Fragment2_2,其余...