[ad_1]
過去時代的安卓app,論及頁面瀏覽我們一般印象中就是整個頁面的疊加,切換。而如果我們想要實現畫中畫的場景,在主頁面中畫定一部分空間讓這塊裏面的資訊內容更替,就要用上Fragment的概念了。
Fragment可以理解為mini exercise,他們都包含UI畫布,都有lifecycle。
用文字不好描述的地方就用圖。請看下方圖示:

如何使用Fragment?
準備工作:
創建Fragment類別時要繼承AndroidX庫的Fragment
class exampleFragment : Fragment()
隨後IDE一定會提醒需要重寫onCreateView()這個方法
override enjoyable onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {return inflater.inflate(R.format.exampleFragment, container, false)
}
重寫onCreateView()方法,通過LayoutInflater把這個Fragment的UI帶進來。
再到心儀的Activity中把準備好的Fragment加進去。就是Fragment的基本使用方法。
<?xml model="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:instruments="http://schemas.android.com/instruments"
android:layout_width="match_parent"
android:layout_height="match_parent"
instruments:context=".MainActivity"><FrameLayout
android:id="@+id/currentFragment"
android:identify="com.instance.fragment.exampleFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottomNavBar"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" />
...
</RelativeLayout>
在Activity裏面的Fragment跳轉則可以如此實現。
- 準備好要換進來的Fragment的程式碼和設計(參照上面exampleFragment的寫法)
- 在需要寫切換畫面功能的Fragment類別裏面寫好觸發場景(set off),譬如最常見的就是Button的setOnClickListener{}。
override enjoyable onCreate(savedInstanceState: Bundle?) {
...
switchFragmentButton.setOnClickListener {
replaceFragment(AnotherExampleFragment())
}
為圖方便閱讀,可以手寫一個replaceFragment的方法示範如下
non-public enjoyable replaceFragment(newFragment: Fragment) {
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()
transaction.substitute(R.id.exampleFragment, newFragment)
transaction.commit()
這裡講解下發生什麼事情:
- 我們準備用button作為trigger,觸發replaceFragment()這個方法
- 在replaceFragment裏面定義好如下幾個幫助我們切換畫面的大將:
- 在Activity中用supportFragmentManager獲取FragmentManager實體,由fragmentManager來管理我們Fragment的生死。再調用這個fragmentManager的beginTransaction()方法表示我們要準備請她做事情。
- 我們把想跳轉的新Fragment當作參數塞進去
transaction.substitute(想換誰,換成誰)
transaction.commit() // 最關鍵的一步,commit就是宣告我們定義好了要做的事情,拜託執行下去
那我們希望Fragment做出來還可以後退的話,就需要調用transaction裏面的backStack功能:
non-public enjoyable replaceFragment(newFragment: Fragment) {
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()
...
transaction.addToBackStack(null) // 在commit前面添加這一行,實現backStack特性
...
}
這樣我們程式跑出來的新Fragment就會疊加到stack上面,然後手勢後退時就會移除最頂部的Fragment,把下一層的內容放到螢幕上給用戶看。
我們需要注意的是,如果我們的畫面變動,是從Fragment切到另一個Fragment,我們的replaceFragment因為Fragment的生命週期,要改寫道onViewCreated()這個內建方法裏面。
override enjoyable onViewCreated(view: View, savedInstanceState: Bundle?) {
tremendous.onViewCreated(view, savedInstanceState)
button_sendMessage?.setOnClickListener {
replaceFragment(Fragment4())
}val bundle: Bundle? = arguments
if (bundle != null) {
displayText.textual content = bundle.getString("message")
}
}
這邊的內容多了一個Bundle,是負責傳遞資料的。一個 != null判定是否為空值,如果bundle有東西,就執行裡面的命令,不然就略過。
這次是我寫教學類文章的一次嘗試,後面會再提到RecyclerView的小經驗。下次再見!
[ad_2]
Source_link