フラグメントのライフサイクル
フラグメントを表示する
onCreate → onCreateView → onViewCreated → onStart → onResume
※onCreateではViewが生成されていない。onViewCreatedにてViewへのアクセスが可能。findViewById()など
フラグメントを閉じる
onPause → onStop → onDestroyView
ActivityからFragmentへの置換
1.実行タイミング
・onCreate
メニューの設定
Jetpack Navigation コンポーネント利用時は引数の取得など
・onCreateView
BindデータのインフレートしViewを戻す
・onViewCreated
値表示などの処理
・onDestroyView
bindingデータのリセット
// 定数の定義
companion object {
const val LETTER = "letter"
const val SEARCH_PREFIX = "https://www.google.com/search?q="
}
// Fragment起動時に引数で取得したパラメータを格納する変数
private lateinit var letterId: String
// 1.onCreate
// Menuなどの設定
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
// 引数の取得
arguments?.let {
letterId = it.getString(LETTER).toString()
}
}
// 2.onCreateView
// Bindデータのインフレート
// Viewを戻す
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// フラグメントのbindingデータをインフレート
_binding = FragmentLetterListBinding.inflate(inflater, container, false)
// viewを取得し戻す
val view = binding.root
return view
}
// 3.onViewCreated
// 値表示などの処理
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// この時点でview作成済みなのでbindingはnullでない
// bindingは!!付きの値で設定されているので?なしでアクセス可能
recyclerView = binding.recyclerView
chooseLayout()
}
// 4.onDestroyView
// bindingデータのリセット
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
2.Activityでcontextをthisとしていたものは、Fragmentではcontextなどに置き換える
LinearLayoutManager(this)
↓
LinearLayoutManager(context)
ContextCompat.getDrawable(this, R.drawable.ic_grid_layout)
↓
ContextCompat.getDrawable(this.requireContext(), R.drawable.ic_grid_layout)