フラグメントのライフサイクル

  • 投稿者:
  • 投稿カテゴリー:その他

フラグメントのライフサイクル

フラグメントを表示する
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)

トレーニング > KOTLIN を用いた ANDROID の基本 > ナビゲーション > ナビゲーションの概要 > フラグメントとナビゲーションコンポーネント > 6. DetailActivity を WordListFragment に変換する