靜態配置
延續上一節Fragment
碎碎念
實際上就是將我們的activity_main.xml佈局中添加一個Fragment的佈局, 這樣的好處是 如果只是插入佈局我們不必額外在MainActivity.kt中寫半毛Code。
壞處是當我們Activity在執行時,使用add() replace()將會無法替換掉原本在xml的靜態Fragment, 當然show()和hide()還是正常運作的,
若想用remove()刪了原本的Fragment也是可以, 但我測試過會連該Fragment Layout都一起刪掉 ,等於說無法在執行期間重複利用該佈局。
老實說這樣的Fragment有點鱉腳,但因為這是最簡單的插入方式所以還是紀錄一下。
設計佈局
在activity_main.xml中的Design模式, 挑選fragment移入我們的手機畫面中。
應該會跳出這個畫面,選擇我們上一節定義的TimeFragment。
再拖拉一個按鈕取名為btnShowHide進來, 然後我們剛剛剛丟進來的fragment也取名為demoFragment 並利用ConstraintLayout約束他們的大小。
最快的方式就是將activity_main.xml替換成底下的程式碼
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.savesomthingdemo.MainActivity">
<fragment
android:id="@+id/demoFragment"
android:name="com.example.savesomthingdemo.TimeFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/btnShowHide"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnShowHide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="隱藏"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>
到這個階段就可以執行看看,你的畫面應該會長這樣。
可以觀察出我們的TimeFragment良好的被擺進demoFragment這個Layout裡面, 而demoFragment底下的"隱藏"按鈕也正常顯示。
接下來定義 隱藏按鈕的內容。
隱藏Fragment (使用hide())
將畫面切到MainActivity.kt 在裡面添加的一個按鈕的點擊監聽器, 裡面定義一個fragmentTrasaction用來對fragment進行操作。
demoFragment.isHidden這應該看程式碼都懂, 如果它是隱藏的就會回傳true,顯示的就會回傳false。
然後最後每個trasaction都要以commit()做為結束, 只有當執行commit()前面呼叫的show()或hide()才會真正執行。
奉上程式碼
package com.example.savesomthingdemo
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnShowHide.setOnClickListener {
val fragmentTrasaction = supportFragmentManager.beginTransaction()
if (demoFragment.isHidden){
fragmentTrasaction.show(demoFragment)
btnShowHide.text = "顯示"
}else{
fragmentTrasaction.hide(demoFragment)
btnShowHide.text = "隱藏"
}
fragmentTrasaction.commit()
}
}
}
結果如下: