首先创建左右两个碎片的布局,然后对应布局分别写两个继承于Fragment的类,重写类中的onViewCreate方法
在重写方法内获得碎片布局的View。
最后在main布局中添加两个fragment控件,注意每个控件要添加android:name="[里面是对应的碎片类]"。
left
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by Administrator on 2017/11/20.
*/
public class LeftFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
View view=inflater.inflate(R.layout.activity_leftfragment,container,false);
return view;
}
}
right
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by Administrator on 2017/11/20.
*/
public class RightFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
View view=inflater.inflate(R.layout.activity_rightfragment,container,false);
return view;
}
}
main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.demos.MainActivity">
<fragment
android:name="com.example.administrator.demos.LeftFragment"
android:id="@+id/leftFragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"/>
<fragment
android:name="com.example.administrator.demos.RightFragment"
android:id="@+id/rightFragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"/>
</LinearLayout>
动态加载Fragment:
动态加载fragment需要标签布局作为载体,即须在主布局中定义一个标签布局。
然后在主类中将frgment布局加载到主布局中的标签布局中。
方法是创建一个FragmentTransaction对象,然后通过调用该对象的replace方法传入标签布局的id和对应fragment的对象,最后调用commit方法即可。
碎片的布局和类跟静态加载一样。
main.java
replaceFragment(new RightFragment());
public void replaceFragment(Fragment fragment){
FragmentManager fragmentManager=getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.rightFragment,fragment);
fragmentTransaction.commit();
}
main.xml
<FrameLayout
android:id="@+id/rightFragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent">
</FrameLayout>
碎片的通信:
想要在碎片中获得其它活动的示例可用MainActivity mainActivity=(MainActivity)getActivity();
想要在活动中获得碎片的实例可用RightFragment rightFragment=(RightFragment)getFragmentManager().findFragmentById(R.id.rightFragment);
获得了各自的实例后就可以调用它们的属性和方法。
碎片的生命周期:
1. 运行状态
当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。
2. 暂停状态
当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。
3. 停止状态
当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态。或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但有在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。
4. 销毁状态
碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态。
常用回调事件方法
onAttach()
当碎片和活动建立关联的时候调用。
onCreateView()
为碎片创建视图(加载布局)时调用。
onActivityCreated()
确保与碎片相关联的活动一定已经创建完毕的时候调用。
onDestroyView()
当与碎片关联的视图被移除的时候调用。
onDetach()
当碎片和活动解除关联的时候调用。
回退fragment方法 popBackStack
getActivity.getFragmentManager.popBackStack(String name,int flags)