Android Fragment
来源:互联网 发布:新版本mac 启动输入法 编辑:程序博客网 时间:2024/06/04 18:54
Fragment在3.0后加入:android.app.Fragment。在v4的兼容包里也有,
一般为了兼容性还是可能会用:android.support.v4.app.Fragment
生命周期:
onAttach,onCreate,onCreateView,onActivityCreated,onStart,onResume,
onPause,onStop,onDestroyView,onDestroy,onDetach
三种类别:
DialogFragment
对话框式的Fragments,可以将一个fragments 对话框并到activity 管理的fragments back stack 中,允许用户回到 该 dialog
ListFragment
类似于ListActivity 的效果,并且还提供了ListActivity类似的onListItemCLick和setListAdapter等功能。内部维护一个ListView
使用布局android.R.layout.list_content
PreferenceFragments
类似于PreferenceActivity .可以创建类似PAD的设置界面。
使用Fragment
1. xml中使用
<fragment class="com.stone.fragment.FragmentDemoActivity$TitlesFragment" // 用成 android:name 也行 android:id="@+id/titles" android:layout_width="0px" android:layout_height="match_parent" android:layout_weight="1" />
Fragment派生类 实现onCreateView() {inflater.inflate(... 将一个layout加入到fragment中) 返回View },
2. 使用代码添加Fragment
FragmentManager fragmentManager = getFragmentManager(); //3.0以上在Activity中使用
FragmentManager fragmentManager = getSupportFragmentManager(); //使用V4包,应使用FragmentActivity
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment01dynamicFragment = new Fragment01();
fragmentTransaction.add(R.id.ll_frag_two,dynamicFragment); //有 layout---将fragment 加入到layout-ll_frag_two 中
fragmentTransaction.add(R.id.ll_frag_three,new Fragment01(),"kkk"); // “kkk” -----tag
fragmentTransaction.add(dynamicFragment,"without_layout"); //无 layout
fragmentTransaction.commit();// 提交,每段事务 都需要begintransaction
fragmentManager.findFragmentById();
fragmentManager.findFragmentByTag("tag"); //无界面的可以用 tag作唯一标识取出
fragmentManager.popBackStack(); // 从activity的后退栈中弹出fragment(这可以模拟后退键引发的动作)。返回void
fragmentManager.addOnBackStackChangedListerner(); // 注册一个侦听器以监视后退栈的变化
fragmentManager.executePendingTransactions(); // 立即执行事务
fragmentTransaction.setTransition(transit); // 设置跳转动画
fragmentTransaction.addToBackStack("options name"); //将之前的操作加入后退栈中,这时按back键,弹出fragment,恢复到之前的状态
3. 事务的注意
通过 add(),remove(), replace() 等 来操作
警告:你只能在activity处于可保存状态的状态时,比如running中,onPause()方法和onStop()方法之前提交事务,否则会引发异常。这是因为fragment
的状态会丢失。如果要在可能丢失状态的情况下提交事务,请使用commitAllowingStateLoss()。
4. 参数传递
与Activity交互,在 实现类中,getActivity(); // 得到其所在的activity
fragment间传参:fragment.setArguments(bundle);
5. Activity与Fragment共享事件
在Fragment中定义回调接口,Activity中传入。
回退栈的说明
fragmentTransaction.addToBackStack 和fragmentManager.popBackStack 的例子:
例1
ft =fm.beginTransaction();
ft.add(new asdf(),"frag1");
ft.addToBackStack("back1");
ft.commit();
ft.add(new asdff(),"frag2");
ft.commit(); //这时按back,弹出backStack中的 back1-frag1
例2
ft =fm.beginTransaction();
ft.add(new asdf(),"frag1");
ft.addToBackStack("back1");
ft.commit();
ft.add(new asdff(),"frag2");
ft.addToBackStack("back2");
ft.commit();//这时按back,先弹出back2,再按back,才弹出back1
例3
ft =fm.beginTransaction();
ft.add(new asdf(),"frag1");
ft.addToBackStack("back1");
ft.commit();
fm.popBackStack();//这里已经将back1弹出栈
ft.add(new asdff(),"frag2");
ft.addToBackStack("back2");
ft.commit();// 这时按back,只弹出back2
附 “在同一layout中切换Fragment(不重新加载fragment)” 代码:
private FragmentManager manager;private FragmentTransaction transaction;private Fragment currentFrag;/** * @param displayFrag 要显示的fragment * * @author stone */private void display(Fragment displayFrag) {if (currentFrag != displayFrag) {transaction = manager.beginTransaction();if (displayFrag == null) return;if (displayFrag.isAdded()) {transaction.show(displayFrag);} else {transaction.add(R.id.fl_content, displayFrag);}if (currentFrag != null) {transaction.hide(currentFrag);}currentFrag = displayFrag;transaction.commit();}}
- Android Fragment---创建Fragment
- Android Fragment---管理Fragment
- Android Fragment---创建Fragment
- Android Fragment---管理Fragment
- (Android) Fragment
- Android Fragment
- Android fragment
- Android Fragment
- Android Fragment
- android Fragment
- android fragment
- fragment android
- android Fragment
- Android Fragment
- android fragment
- Android Fragment
- Android Fragment
- android Fragment
- 【成佩涛】测试依旧是测试,常人勿进
- Hive 显示列名
- 进程上下文VS中断上下文
- 在RedHat 6.2中安装yum并添加163源
- 自己想出来的小球运动的动画(其实不能叫做小球)
- Android Fragment
- 欧拉回路,欧拉路
- 升级DM5校验
- 在U盘中创建AUTORUN.INF文件夹及删除方法
- POJ 1270 Following Orders
- 从无人驾驶汽车看中美互联网差距
- dd命令详解
- 后台作业状态说明(SM36)
- dropbear 轻量级ssh2移植