学习笔记Android(二)Fragment

Fragment:

Fragemnt的出现就是因为屏幕变大(例如平板出现学习笔记Android(二)Fragment

 

2个不同活动界面手机需要2个activity显示但平板要显示在一个activity上),设计者想尽可能利用当前页面显示更多信息所以将一个activity界面又分为多个有生命周期回调函数的fragment。Fragment像是个小activity子activity,也有生命周期需要依附于activity存在所以其生命周期会受所依附的activity生命周期的影响。一个activity里可以有多个fragment,一个fragment也可以用于多个activity。

Fragment生命周期回调函数:学习笔记Android(二)Fragment

create前先绑定,destroy后再解绑

onAttach(Activity) //当Fragment与Activity发生关联时调用。从该方法开始,就可以通过 Fragment.getActivity方法获取与Fragment关联的窗口对象了,但在该方法中仍然无法操作Fragment中的控 件。

onCreateView(LayoutInflater, ViewGroup, Bundle)//创建该Fragment的视图。

onActivityCreated(Bundle)//当Activity的onCreate方法返回时调用。

onDestoryView()//与onCreateView相对应,当该Fragment的视图被移除时调用。

onDetach()//与onAttach相对应,当Fragment与Activity关联被取消时调用

静态使用fragment:

直接新建fragment文件(继承fragment必须至少重写有oncreate和onCreateView),调整对应layout。然后在activity的layoutxml文件内添加fragment组件并在其android:name项指定哪个fragment即可。

动态使用fragment:

这个才是fragment的强大之处,先把mainactivity的layoutxml文件中的fragment引用去掉,只留下最外层linearlayout层,并对此layout添加id。然后可以在activity.java文件内直接对此layout动态添加或替换成Fragment.

Mainactivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Display display = getWindowManager().getDefaultDisplay();//获得屏幕显示
    if(display.getWidth()>display.getHeight())
    {

        getFragmentManager().beginTransaction().replace(R.id.main_layout,new   Fragment1()).commit();
    }else {

        getFragmentManager().beginTransaction().replace(R.id.main_layout,new Fragment2()).commit();
    }
}

报错Fragment1无法转换为Fragment:明明已经extends了,这种一般就是版本错误,方法内所需的fragment的版本和你继承的不同(看报错信息更改Fragment1所继承的版本即可)。

Fragment之间通信:

Fragment和Fragment之间的 通讯的桥梁就是这个FragmentManager这个类,这个类是用来管理所有的这个Fragment的,所以可以 找到任何一个所需要的Fragment类。

实际操作来说的话应该是在一个fragment中使用getActivity获得当前运行的上下文环境再.findViewById获得同一个Activity下不同Fragment内的组件信息。

例如:在fragment2内使用:

TextView textView = (TextView)getActivity().findViewById(R.id.f1textView);获取fragment1的textview。

 

上一篇:pyqt5 图片识别


下一篇:go时区问题