Android基础 - Fragment

老婆保佑,代码无BUG

目录

  • 生命周期
  • 添加Fragment
    • 静态添加
    • 动态添加
    • 几个常用的Utils
  • fragment 传值的问题

一.生命周期

Android基础 - Fragment_第1张图片

> 我 x@#$@# !!!

Android基础 - Fragment_第2张图片

乍一看 ,我艹,刚刚把Activity 生命周期理解,又要记这个,MMP,

大兄弟啊,别急,你这么看

Android基础 - Fragment_第3张图片

这样是不是就感觉 ,很像,其实把,真的就那么像,不知道为啥,很多人都说fragment 是缩小版的Activity,这种说法 我感觉是不对的。,愚见,,以后再扯。。

生命周期说明

  • onAttach
    当Fragment与Activity发生关联时调用。

  • onCreateView

创建该Fragment的视图

  • onActivityCreated

当Activity的onCreate方法返回时调用

  • onDestoryView

与onCreateView想对应,当该Fragment的视图被移除时调用

  • onDetach

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

> 注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现

肯定有人会觉得 这么说会不会太简单了,

Android基础 - Fragment_第4张图片

这里有些地方是看下面这么作者的 ,大兄弟们,去吧,哈哈(ps zhy我算是看他的文章成长的,很推荐的一个大牛)

Android Fragment 真正的完全解析(上)

二.添加Fragment

静态添加(不推荐)

自定义类继承Fragment

//import android.support.v4.app.Fragment
public class TestFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_test, container, false);

    }
}

在MainActivity的activity_main.xml文件中添加碎片




 
   
    


MainActivity继承FragmentActivity(原版的Activity不支持V4Fragment的加载)

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
Android基础 - Fragment_第5张图片
内心世界

是不是感觉很麻烦,相信我,未来的开发 你基本上都用不到,了解就行了,哈哈

动态添加(推荐)

啥都不用管,也不需要FragmentActivity,写好Fragment,直接撸代码

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        TestFragment fragment = new TestFragment();
        transaction.add(R.id.main_ll, fragment);//这里的R.id.main_ll 是容器的id
        transaction.commit();

>拓展

  • remove (Fragment fragment)
    删除某个碎片

  • repace(int layoutId,Fragment fragment)
    替换某个碎片


    Android基础 - Fragment_第6张图片
    窃喜

项目中常用的手法,第一个当属选项卡的切换了

  • 配合RadioGroup实现选项卡点击即可跳转到代码

  • 配合ViewPagerTabLayout实现具有联动作用的选项卡点击即可跳转到代码

  • 配合ViewPagerRadioGroup实现具有联动作用的选项卡点击即可跳转到代码
Android基础 - Fragment_第7张图片
请叫我雷锋

三.fragment 传值的问题

Activity 传参数给 Fragment

fragment中写法

public class DataFragment extends Fragment {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private String mParam1;
    private String mParam2;


    public DataFragment() {
    }

    public static DataFragment newInstance(String param1, String param2) {
        DataFragment fragment = new DataFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_data, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.e("TAG","DATA1--->" + mParam1);
        Log.e("TAG","DATA2--->" + mParam2);
    }
}

Activity中写法

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.main_ll, DataFragment.newInstance("data1","data2"));
        transaction.commit();

    }
}

这时候,就有人说了,大兄弟啊 ,这么多代码,写的这么麻烦,

Android基础 - Fragment_第8张图片
早已看透

做为开发人员,肯定有办法解决,这么恶心的代码的事情,首先 你要确保你使用的开发工具是 Android Studio ,还在使用 Ecplise 的小伙伴。请看下图

Android基础 - Fragment_第9张图片
王的鄙视

ps 如果有大兄弟找到那个 go home 的图片 请发给我,谢谢

使用 Android Studio 生成 Fragment

Android基础 - Fragment_第10张图片
第一步

Android基础 - Fragment_第11张图片
第二步

然后就好了 ,哈哈,有木有很简单。

Fragment传参数给 Activity

使用接口传递参数

请看第二步的第二个红色框框,是不是还有个没勾选上,这次勾选上,然后就神奇的发现,AS 帮你自动生成好了代码,你只需要实现他的接口就OK了。

写在最后

机智的小伙伴,我要说一下,关于传参数的问题,正在开发中,会使用其他的替代方案,毕竟这样的方式,写起来很繁琐,实际开发中,会使用EventBus,或者其他的事件总线框架代替,这个在后面慢慢补充。

你可能感兴趣的:(Android基础 - Fragment)