学习组件Fragment

Fragment称为Android中的碎片,类似Activity,能够包含Button、Text等其他基本组件.不同的是,同一个Activity中可以包含多个Fragment,实现手机或平板设备上分屏的效果.
1基本使用方式.
和MainActivity类似,先在layout中定义布局left_fragment.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_left"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="LeftButton"/>
</LinearLayout>

然后定义继承自android.support.v4.app.Fragment的类LeftFragment,在onCreateView方法中使用定义的left_fragment布局.

public class LeftFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left_fragment, container, false);

        return view;
    }
}

接下来就可以在activity_main布局中使用.

<fragment
        android:id="@+id/fragment_left"
        android:name="com.example.zhudong.fragmenttesttwo.LeftFragment"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight = "1"/>

2在Activity中动态添加Fragment.
上面属于静态添加Fragment的方式.还可以通过FragmentManager,在Activity中动态添加Fragment.在activity_main中添加FrameLayout布局.

<fragment
        android:id="@+id/fragment_left"
        android:name="com.example.zhudong.fragmenttesttwo.LeftFragment"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight = "1"/>
    <FrameLayout
        android:id="@+id/layout_right"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight = "1"/>

在MainActivity中添加按钮的点击事件.

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

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

        Button leftBtn = (Button)findViewById(R.id.btn_left);
        leftBtn.setOnClickListener(this);
    }

    public void changeBtnText(String text) {
        Button btn = (Button) findViewById(R.id.btn_left);
        btn.setText(text);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_left: {
                RightFragment rightFragment = new RightFragment();
                FragmentManager fragmentManager = getSupportFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.layout_right, rightFragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
            }
        }
    }
}

点击LeftButton后,首先创建新的rightFragment,用于替换.其次通过Activity的getSupportManager方法得到FragmentManager,然后通过beginTransaction获得FragmentTransaction类.调用replace方法并提交.实现rightFragment替换右边的FrameLayout.
其中添加addToBackStack语句,可以将FragmentTransaction添加到返回栈,这样再按下back控制键时,就能实现回到原来的FrameLayout状态.
3Fragment与Activity的相互通信.
(1)在Fragment可以通过getActivity方法得到Activity.比如,在上个例子中,我们想要在右边的FrameLayout被替换成RightFragment时,修改右边LeftButton的显示文字,可以在创建Fragment时,调用MainActivity中的changeBtnText方法.

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.right_fragment, container, false);

        MainActivity mainActivity = (MainActivity) getActivity();
        mainActivity.changeBtnText("success");
        return view;
    }

(2)在Activity中可以通过getSupportFragmentManager方法得到FragmentManager,然后通过其findFragmentById的方法寻找相关联的Fragment.
4Fragment的生命周期.
和Activity的7个回调方法(onCreat,onStart,onResume,onPause,onStop,onDestroy,onRestart)相比,Fragment只有5个回调方法.详细如下:

onAttach:         Fragment和活动建立关联时调用;
onCreateView:     Fragment加载布局时调用;
onActivityCreated:确保相关联的Activity创建完毕时调用;
onDestroyView:    Fragment被移除时调用;
onDetach:         Fragment和关联的Activity解除关联的时候调用;

总结:Fragment和Activity类似,都是作为加载layout,处理逻辑的容器.可以加载到Intent的返回栈,也可以和Activity实现相互通信.并且和Activity一样有自己的生命周期回调函数.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Fragment 描述:   翻译可以译为:碎片、片段,Android 3.0开始引入fragments 的概念;...
    Lost_Robot阅读 5,771评论 0 11
  • 片段 Fragment表示 Activity中的行为或用户界面部分。您可以将多个片段组合在一个 Activity ...
    岳小川阅读 4,262评论 0 3
  • 前言 Fragment想必大家不陌生吧,在日常开发中,对于Fragment的使用也很频繁,现在主流的APP中,基本...
    斜杠时光阅读 7,338评论 4 22
  • Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决...
    闲庭阅读 8,057评论 0 10
  • 《Android Fragment完全解析,关于碎片你所需知道的一切》 我们都知道,Android上的界面展示都是...
    cxm11阅读 6,632评论 2 19