Android Fragment 笔记
来源:互联网 发布:帕克生涯数据 编辑:程序博客网 时间:2024/06/06 03:04
1 定义Fragment:
1 继承Fragment
package com.example.testproject;import android.app.Fragment;public class MyFragment extends Fragment {}
2 继承V4包里的Fragment
package com.example.testproject;import android.support.v4.app.Fragment;public class MyFragment extends Fragment {}
两个方法大同小异,无非是APIlevel的问题,如果需要兼容4.0以下的机器,就需要继承自V4包。
2 Fragment的布局和操作
fragment实现自己的布局,要重写onCreateView这个函数
private int layoutRes; //和activity一样的布局文件private View parentView; //通过这个parentView来管理layout文件中声明的控件@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { parentView = inflater.inflate(layoutRes, container, false); return parentView;}
activity有finish()方法结束掉自己,fragment中也有类似的方法:
getActivity().getSupportFragmentManager().popBackStack();//popStack操作也就是弹栈,即模拟返回键的操作
3 加载Fragment:
1 静态加载
在布局文件中当成自定义控件一样声明
<RelativeLayout 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" tools:context=".MainActivity" > <com.example.testproject.MyFragment android:id="@+id/mFragment" android:layout_width="match_parent" android:layout_height="match_parent" ></com.example.testproject.MyFragment></RelativeLayout>
在activity中获取这个fragment:
MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentById(R.id.mFragment);
如果是使用V4包,则activity要继承自FragmentActivity,来获取一些操作Fragment的方法
public class MainActivity extends FragmentActivity
然后再:
MyFragment myFragment = (MyFragment)getSupportFragmentManager().findFragmentById(R.id.mFragment);
2 动态加载
动态加载相对复杂,但是也更加灵活,首先在布局文件里,为fragment的容器添加一个ID:
<RelativeLayout 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:id="@+id/container" tools:context=".MainActivity" ></RelativeLayout>
再在activity中使用:
// 首先获取manager,这个变量在fragment的设计中应该是一个单例,将它写成全局变量比较方便FragmentManager manager = getFragmentManager();// 开启事务,这个transition不能重复使用,建议作为局部变量FragmentTransaction transaction = manager.beginTransaction();// 第一个参数是布局文件中,fragment容器的ID,第二个参数是Fragment的实例// 这个"MY"可以在fragment.getTag()的方法中获取到,起到标识的作用// add方法的重载有很多,可以把TAG替换成ID// add方法之外还有replace,remove,hide,show等方法。transaction.add(R.id.container, new MyFragment(), "MY");// 提交事务transaction.commit();
如果是V4包,则这样子获取manager
FragmentManager manager = getSupportFragmentManager();
在原来代码的基础上再次添加一个fragment:
// 开启事务,这个transition不能重复使用,建议作为局部变量FragmentTransaction transaction = manager.beginTransaction();// 第一个参数是布局文件中,fragment容器的ID,第二个参数是Fragment的实例// 这个"MY"可以在fragment.getTag()的方法中获取到,起到标识的作用// add方法的重载有很多,可以把TAG替换成ID// add方法之外还有replace,remove,hide,show等方法。transaction.add(R.id.container, new MyFragment(), "SECOND");// 将当前也就是第一个fragment添加到Stack中保存起来,// 在添加第二个fragment之后,按返回键执行popstack操作的时候,会显示第一个fragmenttransaction.addToBackStack(null);// 提交事务,不提交不起作用transaction.commit();
4 在activity中管理Fragment:
fragment在activity中是以stack的形式存放,
这里可以添加一个监听器,当Stack的状态发生变化
(比如添加一个fragment,remove掉一个fragment之类的操作),都会响应CAllBACK函数
public class MainActivity extends Activity implements OnBackStackChangedListenergetSupportFragmentManager().addOnBackStackChangedListener(MainActivity.this);@Overridepublic void onBackStackChanged() { do something;}
获取Stack中所有fragment
List<Fragment> fragments = manager.getFragments();
根据TAG获取fragment
MyFragment fragmentByTag = (MyFragment) manager.findFragmentByTag("SECOND");
注意:一个Fragment执行popStack操作以后,fragments的size不会变化,这时候如果调用fragmes.get(index)方法,会报空指针错误,所以一定要先判断 fragment != null才能继续操作。
0 0
- Android Fragment学习笔记
- android fragment学习笔记
- Android Fragment 生命周期笔记
- 学习笔记 android fragment
- android Fragment 学习笔记
- Android笔记 fragment通信
- android笔记9-fragment
- Android fragment笔记整理
- Android学习笔记 - fragment
- Android Fragment 笔记
- Android:Fragment笔记
- Android Fragment 笔记
- Android Fragment 笔记
- Android fragment笔记整理
- Android笔记之Fragment
- Android Fragment笔记整理
- Android Fragment笔记
- Android学习笔记 Fragment
- IOS 验证手机号格式
- 第一周基于对象的程序设计——长方体类
- android 时间和日期选择器 监听设置时间按钮
- jQuery对象和DOM对象相互转化
- 播放网络上的视频
- Android Fragment 笔记
- A Linux serial port test program
- 结构体用于map,set时要重载运算符<
- Android-Universal-Image-Loader图片加载框架使用
- ubutun搭建LAMP环境步骤
- IOS过滤Html标签
- LINUX获取前一天日期的方法
- 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接
- leetcode 日经贴,Cpp code -Median of Two Sorted Arrays