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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
star_zero
November 21, 2019
Programming
3.3k
8
Share
最新の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
7k
Android 14 新機能 / Android 14 Meetup Nagoya
star_zero
1
650
Android 14 と Predictive back gesture / Shibuya.apk #42
star_zero
0
470
Coroutines Test 入門 / Android Test Night #8
star_zero
2
1.3k
What's new in Jetpack / I/O Extended Japan 2022
star_zero
1
700
Kotlin 2021 Recap / DevFest 2021
star_zero
3
1.3k
Kotlin Symbol Processing (KSP) を使ったコード生成 / DroidKaigi 2021
star_zero
2
5.3k
What's new Android 12
star_zero
0
610
Other Decks in Programming
See All in Programming
アーキテクチャモダナイゼーションとは何か
nwiizo
17
4.7k
Rethinking API Platform Filters
vinceamstoutz
0
11k
飯MCP
yusukebe
0
490
へんな働き方
yusukebe
6
2.9k
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
180
Going Multiplatform with Your Android App (Android Makers 2026)
zsmb
2
360
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
870
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
130
KagglerがMixSeekを触ってみた
morim
0
370
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
6.1k
安いハードウェアでVulkan
fadis
1
930
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
350
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
100
Writing Fast Ruby
sferik
630
63k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Fireside Chat
paigeccino
42
3.9k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
350
Music & Morning Musume
bryan
47
7.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Spectacular Lies of Maps
axbom
PRO
1
680
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
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の改善
ありがとうございました