Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
最新のFragment事情 / Fragment new features
Search
star_zero
November 21, 2019
Programming
3.4k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
最新のFragment事情 / Fragment new features
star_zero
November 21, 2019
More Decks by star_zero
See All by star_zero
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
1.6k
Jetpack Compose の Side-effect を使いこなす / DroidKaigi 2023
star_zero
5
7.3k
Android 14 新機能 / Android 14 Meetup Nagoya
star_zero
1
700
Android 14 と Predictive back gesture / Shibuya.apk #42
star_zero
0
520
Coroutines Test 入門 / Android Test Night #8
star_zero
2
1.4k
What's new in Jetpack / I/O Extended Japan 2022
star_zero
1
730
Kotlin 2021 Recap / DevFest 2021
star_zero
3
1.4k
Kotlin Symbol Processing (KSP) を使ったコード生成 / DroidKaigi 2021
star_zero
2
5.3k
What's new Android 12
star_zero
0
630
Other Decks in Programming
See All in Programming
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
350
dotNET_vulnclicker_intro.pdf
deka_morita
0
130
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
200
パーソナライズPodcastを作った話
repunit11
0
130
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
570
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
520
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
最近”作らせてる” ローカルAIアプリの話
akit37
0
430
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
16k
Java 27新機能 / Java 27 new features
kishida
2
210
Simple Storage Service(S3) is not simple
iwatsukayura
0
230
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
KATA
mclloyd
PRO
35
16k
Code Reviewing Like a Champion
maltzj
529
40k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
560
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
550
GitHub's CSS Performance
jonrohan
1033
470k
Side Projects
sachag
456
43k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Crafting Experiences
bethany
1
380
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
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の改善
ありがとうございました