关于android的fragment的一些说明

文章目录

  • android fragment
    • 问答
      • fragment和activity如何相互调用
      • 调用remove()或replace()方法时,原先的fragment会被销毁吗
      • add()和replace()有什么区别
      • 怎么知道堆栈中还有多少个fragment
      • fragment的onActivityCreate是在什么时候被调用
      • Activity中的fragment什么时候会被销毁
      • addToBackStack()的作用是什么
      • 如何在fragment之间传递数据
    • 参考

android fragment

  • 我们会经常被推荐使用fragment,但是当我们看到一个activity中啥也没做,就只是添加了一个fragment时,我们可能会疑惑,这样子我还不如一个activity就搞定了,为何还要用fragment
  • 但是当你面临一个新需求,现在要把两个activity的界面组合在一起,比如平板由于界面比较大,完全可以在一屏显示两个activity的界面,此时你如果之前是按照fragment的写法,那么面对这个需求你能很轻松就实现了,但如果你之前只按照activity的写法,你能怎么做,重新写一个activity来组合之前两个activity的代码吗?
  • 现在你应该知道fragment的重要性了吧

问答

fragment和activity如何相互调用

  • 在fragment中可以通过**getActivity()**方法获得其附着的Activity的引用,然后就可以调用Activity的相关方法了,如
View listView = getActivity().findViewById(R.id.list);
  • 也可以在onAttach时来实例自定义接口,如
public static class FragmentA extends ListFragment {
    OnArticleSelectedListener listener;
    ...
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            listener = (OnArticleSelectedListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString() + " must implement OnArticleSelectedListener");
        }
    }
    ...
}

  • 在Activity中可以通过FragmentManager的 findFragmentById()findFragmentByTag()popBackStack()addOnBackStackChangedListener() 来管理fragment

调用remove()或replace()方法时,原先的fragment会被销毁吗

  • 会不会销毁得看你在事务中有没有调用addToBackStack(),如果没有调用,则原先的fragment会被销毁

add()和replace()有什么区别

  • add()方法不会销毁原先的fragment,而replace()则有可能会销毁原先的fragment,为什么说有可能呢,这是因为销不销毁得看原先的fragment在replace()的事务中有没有调用addToBackStack(),有的话那就不会销毁

怎么知道堆栈中还有多少个fragment

  • 可以通过getSupportFragmentManager().getBackStackEntryCount()获得

fragment的onActivityCreate是在什么时候被调用

  • onActivityCreate是在Activity的onCreate返回后被调用

Activity中的fragment什么时候会被销毁

  • 当Activity被销毁时,则附着于此Activity的fragment都会被销毁

addToBackStack()的作用是什么

  • 在add或remove或replace片段(fragment)时,如果调用了addToBackStack方法,则当按物理返回键时会执行回退动作,例如依次加入了a,b,c,则返回时会回到b,再回到a再退出

如何在fragment之间传递数据

  • 推荐使用ViewModel在fragment之间共享数据,其他方式可以参考官网说法
  • 在 Fragment 之间传递数据 | Android 开发者 | Android Developers

参考

  • 片段 | Android 开发者 | Android Developers

你可能感兴趣的:(android)