如何处理 viewpager2 中的 edittext 焦点
How to handle focus of edittext inside viewpager2
我有一个包含 5 个片段的 viewpager2,最后一个片段有 Edittext
问题是,每次用户选择最后一个片段时,我都想向我的编辑文本请求焦点()。
我尝试过的:
- 使用 registerOnPageChangeCallback(),但问题是,我无法请求关注页面更改,因为它会导致 NPE。
- 使用 onresume、onattach 等,其中 None 当用户在 fragment
之间切换时调用
- Setuservisisiblehint 已弃用
对此问题的任何想法将不胜感激
谢谢
编辑:
对不起我忘了说
我的 Viewpager(parent) 在其他 viewpager2(child) 的最后一个片段中。所以我有 viewpager2(parent),最后一个片段包含我的 viewpager2(child)。
当我选择“child”的最后一个片段时,我可以将焦点设置到编辑文本。但问题是当我更改“parent”选项卡并返回到包含“child”的最后一个片段时。我无法告诉“child”再次聚焦。
是的,Onresume 和 onpause 在“parent”片段工作,而不是在“child”
谢谢
您可以 requestFocus
,在最后一个片段的 onCreateView
方法中或 activity 中的 onActivityCreated
方法,尽管我从未使用过最后一个。
请记住,为了 requestFocus
在 EditText 中,您需要先在触摸模式下启用可聚焦。
您可以通过 XML 使用以下方法完成此操作:
android:focusableInTouchMode="true"
或者使用 Java:
editText.setFocusableInTouchMode(true);
您可以在最后一个片段的 onResume
方法中使用 Viewpager2 requestFocus ,任何屏幕外的片段都被限制在 onStarted
并在完全显示在屏幕上时恢复。
我不确定你为什么说:-
Use onresume, onattach etc, None of them called when user change between fragment
除非你在这里谈论 Activity's
onResume
。
此行为没有详细记录,但您可以在发行说明中查看该功能
https://developer.android.com/jetpack/androidx/releases/viewpager2#1.0.0-alpha06
FragmentStateAdapter: non-primary-item Fragments are capped at STARTED, and their menuVisibility is set to false.
和
https://developer.android.com/jetpack/androidx/releases/viewpager2#1.0.0-beta05
Fix for ordering of Fragment pause / resume transactions when changing the page (we now always pause the old primary item before resuming the new one). (b/139489059)
你还说:-
Setuservisisiblehint is deprecated
它不是Viewpager2的一部分,但原始viewpager和原始viewpager也只恢复当前片段。
我有一个包含 5 个片段的 viewpager2,最后一个片段有 Edittext 问题是,每次用户选择最后一个片段时,我都想向我的编辑文本请求焦点()。
我尝试过的:
- 使用 registerOnPageChangeCallback(),但问题是,我无法请求关注页面更改,因为它会导致 NPE。
- 使用 onresume、onattach 等,其中 None 当用户在 fragment 之间切换时调用
- Setuservisisiblehint 已弃用
对此问题的任何想法将不胜感激 谢谢
编辑:
对不起我忘了说
我的 Viewpager(parent) 在其他 viewpager2(child) 的最后一个片段中。所以我有 viewpager2(parent),最后一个片段包含我的 viewpager2(child)。 当我选择“child”的最后一个片段时,我可以将焦点设置到编辑文本。但问题是当我更改“parent”选项卡并返回到包含“child”的最后一个片段时。我无法告诉“child”再次聚焦。
是的,Onresume 和 onpause 在“parent”片段工作,而不是在“child”
谢谢
您可以 requestFocus
,在最后一个片段的 onCreateView
方法中或 activity 中的 onActivityCreated
方法,尽管我从未使用过最后一个。
请记住,为了 requestFocus
在 EditText 中,您需要先在触摸模式下启用可聚焦。
您可以通过 XML 使用以下方法完成此操作:
android:focusableInTouchMode="true"
或者使用 Java:
editText.setFocusableInTouchMode(true);
您可以在最后一个片段的 onResume
方法中使用 Viewpager2 requestFocus ,任何屏幕外的片段都被限制在 onStarted
并在完全显示在屏幕上时恢复。
我不确定你为什么说:-
Use onresume, onattach etc, None of them called when user change between fragment
除非你在这里谈论 Activity's
onResume
。
此行为没有详细记录,但您可以在发行说明中查看该功能 https://developer.android.com/jetpack/androidx/releases/viewpager2#1.0.0-alpha06
FragmentStateAdapter: non-primary-item Fragments are capped at STARTED, and their menuVisibility is set to false.
和
https://developer.android.com/jetpack/androidx/releases/viewpager2#1.0.0-beta05
Fix for ordering of Fragment pause / resume transactions when changing the page (we now always pause the old primary item before resuming the new one). (b/139489059)
你还说:-
Setuservisisiblehint is deprecated
它不是Viewpager2的一部分,但原始viewpager和原始viewpager也只恢复当前片段。