天天看点

activity 点击后传递数据给fragment_每天一点面试:Fragment相关问题(Android开发篇-小白必看)...目录一览Fragment生命周期懒加载Fragment和Activity传值

activity 点击后传递数据给fragment_每天一点面试:Fragment相关问题(Android开发篇-小白必看)...目录一览Fragment生命周期懒加载Fragment和Activity传值

前言:

每天一点面试,Android开发篇,其他岗位陆续更新中

加深印象 提高面试水平

收藏+关注

目录一览

Fragment相关内容是面试必问的,你是否还记得这些基础技术点?
  1. Fragment生命周期
  2. Fragment懒加载
  3. Fragment和Activity传值
  4. FragmentTransaction的add和replace的区别
  5. Fragment如何实现类似Activity的进栈出栈的效果

Fragment生命周期

activity 点击后传递数据给fragment_每天一点面试:Fragment相关问题(Android开发篇-小白必看)...目录一览Fragment生命周期懒加载Fragment和Activity传值
  • 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
           

继续阅读