第六篇 Fragments应用
来源:互联网 发布:mysql 用户密码破解 编辑:程序博客网 时间:2024/06/12 18:59
见:https://developer.android.com/training/basics/fragments/index.html
一个最简单的例子:
xml代码:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!--
给一个Activity添加一个Fragment,Activity布局文件中声明Fragment
--><fragment
android:id="@+id/article_fragment"
android:name="com.example.fragment.ArtcleFragment"
android:layout_width="match_parent"
android:layout_height="200dp" />
</LinearLayout>
article_view.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/article"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/app_name"
android:textSize="18sp" />
在系统创建这个Activity布局的时候,他会实例化每个布局中的每个fragment,调用每个fragment的onCreateView()方法来取回每个fragment的视图.系统把fragment返回的视图直接插入到<fragment>标签所在的地方。
Java代码:
MainActivity.java
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
ArtcleFragment.java
public class ArtcleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.article_view, container, false);//为了从onCreateView()方法返回一个布局,你可以用一个xml布局文件来填充它
}
}
至于AndroidManifest.xml文件,就启动的Activity就可以了。
更深的方法,查看API
一个Fragment经常被用作activity界面的一部分,为activity贡献自己的界面,为了给fragment提供一个布局,你必须实现onCreateView()方法,为了从onCreateView()方法返回一个布局,你可以用一个xml布局文件来填充它。
当你增加一个Fragment来作为Activity界面布局的一部分时,他存在在Activity视图层里面的一个ViewGroup中,这个Fragment定义了自己的视图.你可以通过在Activity的布局文件中用<fragment>声明这个fragment来把这个fragment插入你的activity中,或者你可以在应用的代码中把他添加添加到一个现存的ViewGroup中.然而,Fragment不必是一个activity布局的一部分,你可以使用一个Fragment而不实用他的UI,这样可以让Fragment作为Activity的一个不可见部分来工作.
上面采用的是前者。
下面说说后者,即不使用<fragment>标签添加Fragment到Activity。
在任何你Activity运行的时候,你都可以把fragment添加到Activity的视图中.你只需要指定一个用于盛放Fragment的ViewGroup.为了让fragment可以被管理(比如添加,删除,替换fragment),你必须使用来自FragmentTransaction的API.你可以像下面这样在Activity中获取一个FragmentTransaction的实例:
FragmentManager fragmentManager = getFragmentManager()FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
你可以使用Add()方法添加一个Fragment,指定要添加的Fragment和目标View,如下:
ExampleFragment fragment = new ExampleFragment();fragmentTransaction.add(R.id.fragment_container, fragment);fragmentTransaction.commit();
add()方法中的第一个参数是Fragment所要放置的目标ViewGroup,通过资源ID指定,第二个参数是要添加的Fragment.只要你使用FragmentTransaction做了修改,你必须调用commit()方法来使修改生效.
方法:
onCreate()创建fragment的时候,系统会调用这个方法.在你实现过程中,当fragment暂停(pause),停止(stop)然后恢复(resume)时,你应该初始化你想要保持的,fragment的必要的组件.
onCreateView()在fragment第一次绘制他的用户界面的时候系统会调用这个方法.如果你想为你的fragment绘制界面,你必须从这个方法中返回一个View,这个View是你fragment布局的基础.如果这个Fragment不提供UI,你可以返回空.
onPause()系统调用这个方法作为用户离开这个fragment的第一标志(虽然这不总是意味着这个Fragment被摧毁了).通常是你需要做一些改变,这些改变超出了当前的用户会话(因为用户有可能不会回到这个界面来).
DialogFragment:显示一个浮动的对话框.使用这个类来创建一个对话框是和使用对话Helper方法在Activity类中创建对话框都是很好的方法,因为你可以把Fragment对话框包含在activity管理的Fragment返回栈中,允许用户返回到关闭的Fragment中.
ListFragment:展示一列被adapter(比如SimpleCursorAdapter)管理的项,和ListActivity很相似.它提供了一些管理一个列表视图的方法,比如处理点击事件的onListItemClick()方法.
PreferenceFragment:用一个列表来显示一组偏好设置对象,类似于PreferenceActivity. 在创建设置型的activity时会用到.
为了管理你Activity中的fragment,你需要使用FragmentManager.你可以通过你Activity中的getFragmentManager()来获取它,你可以这样操作:
使用findFragmentById()(提供UI的Fragment)或者findFragmentByTag()(没有提供UI的Fragment) 获取你Activity存在的Fragment;
使用popBackStack()把Fragment从返回栈中弹出(模拟用户的返回命令);
使用addOnBackStackChangedListener()方法为返回栈的变化注册监听器等,更多请见FragmentManager API。
执行Fragment事务
在你的Activity中使用Fragment的最大好处就是可以针对用户的操作,进行对Fragment的添加,移除,替换等等其他操作.你提交给Activity的每个变化称为一个事务,这些事务你可以使用FragmenTransaction的API来实现.你也可以在Activity管理的返回栈中保存每个事务,使用户可以在Fragmen的变化后返回之前的状态(类似于在Activity跳转后的返回).取得一个FragmentTransaction的实例:
FragmentManager fragmentManager = getFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();每个事务是一系列你想要同时执行的Fragmen的变化.你可以使用像add(),remove(),replace()这样的方法来为一个事务设定你想要执行的操作.为了使Activity的事务生效,你必须执行commit()方法.
在你调用commit()方法的之前,为了添加这个事务到一个Fragmen事务的返回栈,你可能想要调用addToBackStack()方法.这个返回栈被Activity管理,允许用户通过按下返回按键返回之前的Fragmen状态.
操作代码段:
// Create new fragment and transaction//创建一个新的Fragmen和事务Fragment newFragment = new ExampleFragment();FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment,//使用这个Fragment替换在Fragmen容器中的Fragmet// and add the transaction to the back stack//添加这个事务到返回栈transaction.replace(R.id.fragment_container, newFragment);//新的Fragmen替换了R.id.fragment_container ID指定的布局容器中当前存在的fragment(如果存在的话)transaction.addToBackStack(null);//通过调用addToBackStack()方法,替换事务被保存在了返回栈中,这样用户可以回退这个事务,通过按下返回键返回到以前的fragment. // Commit the transaction//提交这个事务.transaction.commit();如果你在事务中添加了多个变化(比如另一个add()方法或者remove()方法),然后调用了addToBackStack()方法,那在你调用commit()方法之前的所有变化都会作为单独的事务被添加到返回栈中,返回键将会把他们全部回退.同一个容器添加多个fragment,那么你添加的顺序决定了他们在视图层出现的顺序,还有就commit必须最后提交。特别的,fragment可以通过getActivity()方法来访问Activity实例并可以轻易的执行像在activity视图中查找View的任务.
View listView = getActivity().findViewById(R.id.list);同样的,使用findFragmentById()或findFragmentByTag()通过从FragmentManager获取一个对这个Fragment的引用,你的Activity可以调用fragment中的方法
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
- 第六篇 Fragments应用
- 第六课 Fragments-界面片段
- Fragments
- Fragments
- fragments
- Fragments
- Fragments
- Fragments
- Fragments
- Fragments
- fragments
- Fragments
- Fragments
- Fragments
- Fragments
- Fragments
- Fragments
- Fragments
- sql 条件查询
- Oracle DB 序列
- java多线程
- iphone开发账号申请
- java学习笔记8 字符流
- 第六篇 Fragments应用
- linux下最全的快捷键大全
- java垃圾回收机制
- windows蓝屏日志文件、dump文件收集方法
- Sytem monitor commands and tools
- “更换介质:请把标有…… DVD 的盘片插入驱动器“/media/cdrom/”再按回车键“ 解决方法
- 项目中关于date的注意点
- TCP实现文件传输
- 仿网易聚合新闻 - 超简单实现 - 刷新按钮CSS3旋转效果