zoukankan      html  css  js  c++  java
  • Fragment的控制-切换View和页面替换

    Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序就可以了,不用到处去找。里面分开不同功能,实现了不同的类。

    这里讲解一下Fragment的控制,主要是切换View和页面替换等操作。还有就是如何获取Fragment的管理对象,以及与Activity的通信方式。

    1、管理Fragment
    要在activity中管理fragment,需要使用FragmentManager. 通过调用activity的getFragmentManager()或FragmentActivity的getSupportFragmentManager()取得它的实例.

    •可以通过FragmentManager做一些事情, 包括: 使用findFragmentById()(用于在activity layout中提供一个UI的fragment)或findFragmentByTag()(适用于有或没有UI的fragment)获取activity中存在的fragment。
    •将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令)。
    •使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener。

    2、处理Fragment事务
    关于在activity中使用fragment的很强的一个特性是:根据用户的交互情况,对fragment进行添加、移除、替换以及执行其他动作。提交给activity的每一套变化被称为一个事务,可以使用在FragmentTransaction中的 API 处理。我们也可以保存每一个事务到一个activity管理的backstack,允许用户经由fragment的变化往回导航(类似于通过 activity往后导航)。

    从 FragmentManager 获得一个FragmentTransaction实例:

    [java] view plaincopy
     
    1. FragmentManager fragmentManager =getFragmentManager();  
    2. FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();  

    每一个事务都是同时要执行的一套变化。可以在一个给定的事务中设置你想执行的所有变化,使用诸如 add()、remove()和 replace()。然后, 要给activity应用事务,必须调用 commit()。

    在调用commit()之前,你可能想调用 addToBackStack(),将事务添加到一个fragment事务的backstack。这个back stack由activity管理, 并允许用户通过按下 BACK按键返回到前一个fragment状态。

    [java] view plaincopy
     
    1. //创建修改实例  
    2. Fragment newFragment = newExampleFragment();  
    3. FragmentTransaction transaction =getFragmentManager().beginTransaction();  
    4. // Replace whatever is in thefragment_container view with this fragment,  
    5. // and add the transaction to the backstack  
    6. transaction.replace(R.id.fragment_container,newFragment);  
    7. transaction.addToBackStack(null);  
    8. //提交修改  
    9. transaction.commit();  

    上面是如何将一个fragment替换为另一个,并在后台堆栈中保留之前的状态。在这个例子中,newFragment替换了当前layout容器中的由R.id.fragment_container标识的fragment。通过调用 addToBackStack(), replace事务被保存到back stack,因此用户可以回退事务,并通过按下BACK按键带回前一个fragment。

    如果添加多个变化到事务(例如add()或remove())并调用addToBackStack(),然后在你调用commit()之前的所有应用的变化会被作为一个单个事务添加到后台堆栈,BACK按键会将它们一起回退。添加变化到 FragmentTransaction的顺序不重要, 除以下例外:

    •必须最后调用 commit()
    •如果添加多个fragment到同一个容器, 那么添加的顺序决定了它们在view hierarchy中显示的顺序

    当执行一个移除fragment的事务时, 如果没有调用 addToBackStack(), 那么当事务提交后,那个fragment会被销毁,并且用户不能导航回到它。有鉴于此,当移除一个fragment时,如果调用了addToBackStack(), 那么fragment会被停止,如果用户导航回来,它将会被恢复。另外,对于每一个fragment事务,你可以应用一个事务动画,通过在提交事务之前调用setTransition()实现。

    调用 commit() 并不立即执行事务。恰恰相反,它将事务安排排期, 一旦准备好,就在activity的UI线程上运行(主线程)。如果有必要, 无论如何,你可以从你的UI线程调用executePendingTransactions()来立即执行由commit()提交的事务。但这么做通常不必要,除非事务是其他线程中的任务的一个从属。
    警告:你只能在activity保存它的状态(当用户离开activity)之前使用commit()提交事务.
     
    3、与Activity通信
    尽管Fragment被实现为一个独立于Activity的对象,并且可以在多个activity中使用,但一个给定的fragment实例是直接绑定到包含它的activity的。 特别的fragment可以使用 getActivity() 访问Activity实例, 并且容易地执行比如在activity layout中查找一个view的任务。如下面的代码:

    [java] view plaincopy
     
    1. View listView =getActivity().findViewById(R.id.list);  

    同样地,activity可以通过从FragmentManager获得一个到Fragment的引用来调用fragment中的方法,使用findFragmentById() 或 findFragmentByTag()。

    [java] view plaincopy
     
    1. ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);  

    4、总结
    最后需要说一下Fragment的例子,Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序就可以了,不用到处去找。里面分开不同功能,实现了不同的类。可以根据需要查看具体代码。

    zz:http://blog.csdn.net/luohai859/article/details/40072111

  • 相关阅读:
    jython resources
    Installing a Library of Jython ScriptsPart of the WebSphere Application Server v7.x Administration Series Series
    jython好资料
    ulipad install on 64bit win7 has issue
    an oracle article in high level to descibe how to archtichre operator JAVA relevet project
    table的宽度,单元格内换行问题
    Linux常用命令大全
    dedecms系统后台登陆提示用户名密码不存在
    登录织梦后台提示用户名不存在的解决方法介绍
    Shell常用命令整理
  • 原文地址:https://www.cnblogs.com/Nbox1989/p/4362872.html
Copyright © 2011-2022 走看看