android移除fragment,Fragment 的创建、替换与移除
一、前言
Fragment 是從 Android 3.0 開始引入的,翻譯過來就是碎片的意思。Fragment 的作用以及使用場景我就不贅述了。這篇博文我們就主要講 Fragment 的創建、替換與移除這三個操作,至于 Fragment 的生命周期、如何與 Activity 進行通信等內容我們會在后面陸續講到的。
一、Fragment 的創建
要使用 Fragment,可以通過繼承 Fragment 類來創建 Fragment,在多數情況下我們需要給 Fragment 定制一個 UI,但是,也可以為 Activity 創建一個沒有 UI,只提供后臺行為的 Fragment。Fragment 的創建一般有兩種方式:通過 xml 標簽創建,即靜態添加 Fragment;
通過 java 代碼動態創建,即動態添加 Fragment。
1.1、通過 xml 標簽靜態添加 Fragment(不常用)在 IndexActivity 的 activity_index 布局中加入 fragment 標簽,并通過 name 關聯到相應的 Fragment;<?xml version="1.0" encoding="utf-8"?>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".IndexActivity">
android:id="@+id/fragment_center"
android:name="com.zjgsu.fragmentdemo.fragment.CenterFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5" />
android:id="@+id/fragment_bottom"
android:name="com.zjgsu.fragmentdemo.fragment.BottomFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
創建 CenterFragment;public class CenterFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_center, container, false);
return view;
}
}
創建 BottomFragment;public class BottomFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_bottom, container, false);
return view;
}
}
然后我們啟動 IndexActivity 就可以看到效果了。
1.2、通過 Java 代碼動態添加 Fragment動態添加 Fragment 則不需要在 IndexActivity 的 activity_index 布局中加入 fragment 標簽;<?xml version="1.0" encoding="utf-8"?>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".IndexActivity">
android:id="@+id/layout_center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5" />
android:id="@+id/layout_bottom"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
動態添加 Fragment 主要涉及 FragmentManager 和 FragmentTransaction 這兩個操作對象。public class IndexActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
/*
動態添加 Fragment 到 Activity 中
要涉及到兩個操作對象
FragmentManager 和
FragmentTransaction
*/
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.layout_center, new CenterFragment());
fragmentTransaction.add(R.id.layout_bottom, new BottomFragment());
fragmentTransaction.commit();
}
}
二、Fragment 的替換與移除
Fragment 的替換與移除也都是通過 FragmentManager 和 FragmentTransaction 來完成的。
我們先來看下效果:
具體代碼如下所示public class Index2Activity extends AppCompatActivity implements View.OnClickListener {
private Button btnReplace;
private Button btnRemove;
private FirstFragment f1;
private SecondFragment f2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index2);
initView();
}
// 初始化 View
private void initView() {
btnReplace = findViewById(R.id.btn_replace);
btnRemove = findViewById(R.id.btn_remove);
btnReplace.setOnClickListener(this);
btnRemove.setOnClickListener(this);
initFragment();
}
// 初始化 Fragment
private void initFragment() {
f1 = new FirstFragment();
f2 = new SecondFragment();
addFragment();
}
// 添加 Fragment
private void addFragment() {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.layout_container, f1)
.commit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_replace:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.layout_container, f2)
// 點擊 返回鍵 可以回到原來的 Fragment
.addToBackStack(null)
.commit();
break;
case R.id.btn_remove:
getSupportFragmentManager()
.beginTransaction()
.remove(f2)
.commit();
break;
}
}
}
三、源碼
源碼已經上傳至 github,下一篇博文我們講 Fragment 與 Activity 之間的通信。
總結
以上是生活随笔為你收集整理的android移除fragment,Fragment 的创建、替换与移除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何让EXCEL公式结果不显示#N/A、
- 下一篇: 郁闷的100个原因