進入到程式的部分,首先我習慣先將各個頁面的切換做好,像是A頁面>B頁面、A頁面>C頁面。
開始前可以先把activity_main做一些修改,當作之後各個頁面的容器。
<FrameLayout 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"
android:background="#6CC9C1"
android:gravity="center_horizontal"
android:orientation="vertical"
android:id="@+id/main_container"
tools:context=".MainActivity">
</FrameLayout>
activity_main類似下圖藍色區塊,與一般使用不同,這邊在做切換頁面時會一次抽換一整個頁面。
一般使用fragment的清況可能會像下圖一樣只抽換特定區塊。
有了初步的理解後接下來要實作切換頁面的功能,首先開啟三個新檔案步驟如下。
完成後package會是這個樣子,比原先多了三個檔案。
接下來可以開始頁面的切換了,在這邊提供一個方法,可以做一個共通的函式來幫我們完成切換頁面的工作。
object CommonUtils {
fun TransFragment(context: Context, id: Int, fragment: Fragment?, tag: String, bundle: Bundle?) {
if (fragment == null) return
fragment.arguments = bundle
val appCompatActivity = context as AppCompatActivity
appCompatActivity.supportFragmentManager
.beginTransaction()
.disallowAddToBackStack()
.add(id, fragment, tag)
.commit()
}
}
完成後只要在我們的MainFragment上使用便能夠方便在要面上做切換。
class MainFragment : Fragment() {
companion object
val TAG = MainFragment::class.java.simpleName
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_main, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
}
protected fun initViews() {
select.setOnClickListener {
CommonUtils.TransFragment(context!!, R.id.main_container, SelectFragment(), SelectFragment().TAG, null)
}
note.setOnClickListener {
CommonUtils.TransFragment(context!!, R.id.main_container, NoteFragment(), NoteFragment().TAG, null)
}
}
}
到這邊便完成了頁面的切換,接下來會在做各部份的詳細說明。