Android学习笔记之Fragment

2018-10-19  本文已影响0人  sssssss_

1.Fragment 是什么?

Fragment 是 Android 自 3.0 版本开始引入的一种可以嵌入在 Activity 当中的UI片段,主要是为了能在不同分辩率屏幕上进行更为动态和灵活的UI设计,让程序更加合理和充分利用大屏幕空间。

2.Fragment 为什么被称为第五大组件

  1. 使用频率高;
  2. 有自己的生命周期;
  3. 可以灵活加载到Activity中;
  4. 虽然有自己的生命周期,并不像 Activity 那样独立的,需要依附 Activity。

3.Fragment 加载到 Activity 的两种方式

步骤1:新建fragment.xml文件
步骤2:在Fragment中,重写onCreateView方法,为Fragment设置xml布局文件,转换成view对象返回。

//传递三个参数:
//LayoutInflater inflater表示布局填充器或者加载器,将xml文件转换成view对象。
//ViewGroup container表示fragment插入activity的布局视图对象。
//Bundle saveInstanceState表示存储上一个fragment的信息。
View view = inflater.inflate(R.layout.fragment,container,false);
return view;

步骤3:在activity布局中,通过fragment标签引入fragment,记住是name属性

<fragment
    android:name="com.songsong.FragmentTest.fragment"
    ...
/>
//前提1:先创建 Fragment类并继承 Fragment,在onCreateview设置XML布局文件。
//前提2:在Activity的XML布局文件中准备好布局容器R.id.lin_id

//步骤1:创建Fragment的管理器对象FragmentManager 
FragmentManager manager = getFragmentManager();
//步骤2:获取Fragment的事务对象并且开启事务
FragmentTransaction transaction = manager.beginTransaction();
//步骤3:调用事务中相应的动态操作Fragment的方法执行,add、remove和replace
transaction.add(R.id.lin_id, new Fragment1());
//模拟返回栈
transaction.addToBackStack(null);
//步骤4:提交事务
transaction.commit();

4.Fragment 和 Activity 之间的通信

通常,Fragment 与 Activity 通信存在三种情形:

//通过FragmentManage的findFragmentById得到实例,然后就可以调用fragment里的方法
RightFragment rf = getFragmentManager().findFragmentById(R.id.right_fragment);
//fragment中调用Activity的方法,getActivity本身就是一个Context对象。
MainActivity act = getActivity();

5.Fragment 的生命周期

Fragment生命周期

简单的Fragment流程图—— onAttach->onCreate -> onCreateView -> onActivityCreated -> onStart -> onResume ->创建成功-> onPause->onStop->onDestroyView -> onDestroy->onDetach。其中和Activity有不少名称相同作用相似的方法,而不同的方法有:

Fragment操作生命流程图:

6.FragmentPagerAdapter 与 FragmentStatePagerAdaper 区别:

7.Fragment 的 replace、add、remove 方法

8.Fragment 特点

9.Activity和Fragment的异同?

10.怎么理解Activity和Fragment的关系?

11.何时会考虑使用Fragment?

12.Activity向引入的Fragment传值

存储值 获取值

13.Fragment向Activity传值

步骤1:Fragment 中定义传值的回调接口,在生命周期 onAttach() 方法中获取接口的实现。

private MyListener listener;
@Override
public void onAttach(...){
   ...
   listener = (MyListener)getActivity();
}
public interface MyListener{
   public abstract void sendMessage(String str);
}

步骤2:Fragment 需要传值的位置调用接口回调方法传值。

listener.sendMessage(info);

步骤3:Activity 实现回调接口重写回调方法获取传递的值。

@Override
public void sendMessage(String str){
  if(null !=str && !"".equals(str)){
    //显示处理
    }
}

14.Fragment与Fragment之间的传值

fragment.jpg

13.遇到过哪些关于Fragment的问题,如何处理的?

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) {
// 在页面重启时,Fragment会被保存恢复,而此时再加载Fragment会重复加载,导致重叠 ;
    if(saveInstanceState == null){
    // 或者 if(findFragmentByTag(mFragmentTag) == null)
       // 正常情况下去 加载根Fragment 
    } 
}

Fragment状态保存 startActivityForResult 是哪个类的方法,在什么情况下使用?

本文参考资料:

上一篇下一篇

猜你喜欢

热点阅读