Fragement (一)
Fragment 有自己的生命周期
Fragment依賴于Activity
Fragment通過 getActivity() 可以獲取所在的Activity检盼;
Activity通過FragmentManager的 findFragmentById()或findFragmentByTag 獲取Fragment
Fragment和Activity是多對多的關(guān)系
1. 創(chuàng)建裝在Fragment的ContainerActivity
java 代碼:ContainerActivity.class
public class ContainerActivity extends AppCompatActivity {
private AFragment aFragment;
private BFragment bFragment;
private Button btn_change;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_container);
//實現(xiàn)點擊按鈕由A碎片轉(zhuǎn)換到B碎片
btn_change = (Button) findViewById(R.id.btn_change);
btn_change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(bFragment == null){
bFragment=new BFragment();
}
getSupportFragmentManager().beginTransaction().replace(R.id.fl_container,bFragment).commitAllowingStateLoss();
}
});
//把AFragment添加到Activity中,記得調(diào)用commit
//R.id.fl_container:裝在fragment的容器
//aFragment:要加載的fragment
aFragment=new AFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fl_container,aFragment).commitAllowingStateLoss();
}
}
關(guān)鍵代碼
1. 先實例化單個Fragment
2. 調(diào)用getSupportFragment方法里的beginTransaction()方法去向指定容器添加aFragament
3. 最后調(diào)用commitAllowingStateLoss()方法
//R.id.fl_container:裝在fragment的容器
//aFragment:要加載的fragment
aFragment=new AFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fl_container,aFragment).commitAllowingStateLoss();
xml 代碼:activity_container.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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_change"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="更換Fragment"/>
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btn_change"/>
</RelativeLayout>
2.創(chuàng)建Fragment(AFragment和BFragment完全相同)
java 代碼: AFragment.class
public class BFragment extends Fragment {
private TextView mTvTitle;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//相當于activity的onCreate里的setcontentView,給它一個布局文件返回一個視圖文件
View view=inflater.inflate(R.layout.fragment_b,container,false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
//當View創(chuàng)建完成后箫章,這里有一個回調(diào)方法
super.onViewCreated(view, savedInstanceState);
mTvTitle=(TextView)view.findViewById(R.id.tv_title);
}
}
xml 代碼:fragment_b.xml
<?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"
android:gravity="center">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="20sp"
android:text="我是BFragment"
android:gravity="center"/>
</LinearLayout>