前言:
每天一点面试,Android开发篇,其他岗位陆续更新中
加深印象 提高面试水平
收藏+关注
目录一览
Fragment相关内容是面试必问的,你是否还记得这些基础技术点?
- Fragment生命周期
- Fragment懒加载
- Fragment和Activity传值
- FragmentTransaction的add和replace的区别
- Fragment如何实现类似Activity的进栈出栈的效果
Fragment生命周期
- onAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。
- onCreate():Fragment被创建时调用。
- onCreateView():创建Fragment的布局。
- onActivityCreated():当Activity完成onCreate()时调用。
- onStart():当Fragment可见时调用。
- onResume():当Fragment可见且可交互时调用。
- onPause():当Fragment不可交互但可见时调用。
- onStop():当Fragment不可见时调用。
- onDestroyView():当Fragment的UI从视图结构中移除时调用。
- onDestroy():销毁Fragment时调用。
- onDetach():当Fragment和Activity解除关联时调用。
懒加载
fragment放在viewPager里面,viewpager会帮我们预先加载一个(预加载左右各一个),但是当我们要看fragment里面的内容时,我们也许只会去看第一个,不会去看第二个,如果这时候不去实现fragment的懒加载的话,就会多余的去加载一些数据,造成用户多消耗流量,所以我们采取懒加载的方式。
如何解决:
重写setUserVisibleHint方法,判断当前是否课件
package fragment;import android.support.v4.app.Fragment;/** * Fragment懒加载 */public abstract class LazyFragment extends Fragment{ protected boolean isVisible; @Override public void setUserVisibleHint(boolean isVisibleToUser) {//fragment从不可见到完全可见的时候,会调用该方法 super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()){ isVisible = true; onVisible(); }else { isVisible = false; onInvisible(); } } protected abstract void lazyLoad();//懒加载的方法,在这个方法里面我们为Fragment的各个组件去添加数据 protected void onVisible(){ lazyLoad(); } protected void onInvisible(){ }}
Fragment和Activity传值
activity与fragment之间进行数据传递是,在Activity中将要传递的数据封装在一Bundle中,使用setArgument(Bundel bundel)方法传递数据,在要传递到的Fragment中 使用this.getArgment(),得到传递到的Bundle
示例代码:
public class Activity2Fragment extends AppCompatActivity { TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activcity_2_fragment); text = (TextView) findViewById(R.id.text); // 步骤1:获取FragmentManager FragmentManager fragmentManager = getFragmentManager(); // 步骤2:获取FragmentTransaction FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // 步骤3:创建需要添加的Fragment final mFragment fragment = new mFragment(); // 步骤4:创建Bundle对象 // 作用:存储数据,并传递到Fragment中 Bundle bundle = new Bundle(); // 步骤5:往bundle中添加数据 bundle.putString("message