Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
最新のFragment事情 / Fragment new features
Search
star_zero
November 21, 2019
Programming
8
3.1k
最新のFragment事情 / Fragment new features
star_zero
November 21, 2019
Tweet
Share
More Decks by star_zero
See All by star_zero
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
1.3k
Jetpack Compose の Side-effect を使いこなす / DroidKaigi 2023
star_zero
5
6k
Android 14 新機能 / Android 14 Meetup Nagoya
star_zero
1
590
Android 14 と Predictive back gesture / Shibuya.apk #42
star_zero
0
380
Coroutines Test 入門 / Android Test Night #8
star_zero
2
1.1k
What's new in Jetpack / I/O Extended Japan 2022
star_zero
1
630
Kotlin 2021 Recap / DevFest 2021
star_zero
3
1.3k
Kotlin Symbol Processing (KSP) を使ったコード生成 / DroidKaigi 2021
star_zero
2
5.2k
What's new Android 12
star_zero
0
570
Other Decks in Programming
See All in Programming
Lambda(Python)の リファクタリングが好きなんです
komakichi
4
230
Beyond_the_Prompt__Evaluating__Testing__and_Securing_LLM_Applications.pdf
meteatamel
0
100
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
On-the-fly Suggestions of Rewriting Method Deprecations
ohbarye
1
4.7k
ウォンテッドリーの「ココロオドル」モバイル開発 / Wantedly's "kokoro odoru" mobile development
kubode
1
250
ComposeでのPicture in Picture
takathemax
0
130
ASP.NETアプリケーションのモダナイゼーションについて
tomokusaba
0
240
Cursorを活用したAIプログラミングについて 入門
rect
0
150
The Implementations of Advanced LR Parser Algorithm
junk0612
1
1.3k
M5UnitUnified 最新動向 2025/05
gob
0
120
2025-04-25 GitHub Copilot Agent ライブデモ(スクリプト)
goataka
0
100
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
330
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
780
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Facilitating Awesome Meetings
lara
54
6.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.7k
Embracing the Ebb and Flow
colly
85
4.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
How to train your dragon (web standard)
notwaldorf
91
6k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Transcript
最新のFragment事情 Android感謝祭 2019/11/21
About me •Kenji Abe •クックパッド株式会社 •Google Developers Expert for Android
•Twitter: @STAR_ZERO
Update Fragment
⚠今回の環境⚠ •Fragment 1.2.0 rc-02 ‣ 2019/11/21時点の最新
Constructor with LayoutId
Constructor with LayoutId •コンストラクタにLayoutIdを渡せるようになった •DataBinding/ViewBindingは非対応 class SampleFragment : Fragment(R.layout.fragment_sample)
Constructor with LayoutId https://developer.android.com/reference/androidx/fragment/app/Fragment.html
FragmentContainerView
FragmentContainerView •これからはFrameLayoutではなくコチラが推奨 •アニメーションのz-orderなどのバグがあった •https://issuetracker.google.com/issues/37036000
FragmentContainerView <androidx.fragment.app.FragmentContainerView android:id="@+id/container" android:name="com.example.SampleFragment" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"
/>
OnBackPressedDispatcher
OnBackPressedDispatcher •Fragmentでバックキーの制御が可能になった •Lifecycleによってコールバックの追加、削除が簡単 •コールバックの有効、無効の切り替えも可能
OnBackPressedDispatcher class SampleFragment : Fragment() { private val callback =
object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // バックキーが押されたとき... } } override fun onAttach(context: Context) { super.onAttach(context) requireActivity().onBackPressedDispatcher .addCallback(this, callback) } }
OnBackPressedDispatcher class SampleFragment : Fragment() { // ... fun someFunction()
{ callback.isEnabled = false requireActivity().onBackPressedDispatcher.onBackPressed() } }
OnBackPressedDispatcher class MainActivity : AppCompatActivity() { override fun onBackPressed() {
// FragmentのhandleOnBackPressedの後に呼び出される if (onBackPressedDispatcher.hasEnabledCallbacks()) { // Fragmentのバックキー制御が有効 } else { // Fragmentのバックキー制御が無効 } } }
FragmentFactory
FragmentFactory •Fragmentの生成を行うクラス •Fragmentのコンストラクタに引数が渡せるようになる ‣ コンストラクタインジェクションが可能 •引数なしのコンストラクタ不要 •FragmentScenarioでMock
FragmentFactory class SampleFactory: FragmentFactory() { override fun instantiate( classLoader: ClassLoader,
className: String ): Fragment { return when (className) { SampleFragment::class.java.name -> SampleFragment("ABC") else -> super.instantiate(classLoader, className) } } }
FragmentFactory class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?)
{ supportFragmentManager.fragmentFactory = SampleFactory() super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // fragment-ktx supportFragmentManager.commit { add<SampleFragment>(R.id.container) } } }
FragmentFactory @RunWith(AndroidJUnit4::class) class SampleFragmentTest { @Test fun textSample() { val
mockFactory = MockFactory() val scenario = launchFragmentInContainer<SampleFragment>( factory = mockFactory ) onView(withId(R.id.text)).check(matches(withText("Hello World!"))) } }
FragmentFactory •Daggerで使うには? ‣ https://satoshun.github.io/2018/11/android_all_inject_ctor/
RESUME_ONLY_CURRENT_FRAGMENT
RESUME_ONLY_CURRENT_FRAGMENT •ViewPagerでonResumeが呼ばれるタイミングが変わる ‣ これまでは表示されてなくてもonResumeが呼ばれてた ‣ 表示されてるFragmentのonResumeのみが呼ばれる •setUserVisibleHintはDeprecated
RESUME_ONLY_CURRENT_FRAGMENT class SampleAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { // 以前の挙動にしたい場合は
BEHAVIOR_SET_USER_VISIBLE_HINT override fun getItem(position: Int): Fragment { // ... } override fun getCount(): Int { // ... } }
fragment-ktx
fragment-ktx supportFragmentManager.commit { add<SampleFragment>(R.id.container) } val viewModel: SampleViewModel by viewModels()
val viewModel: SampleViewModel by activityViewModels() val viewModel: SampleViewModel by viewModels { viewModelFactory }
lint
lint
lint
今後のFragment
今後のFragment https://www.youtube.com/watch?v=RS1IACnZLy4
今後のFragment •Multiple Back Stacks •Fragmentの戻り値 •Lifecycleの改善
ありがとうございました