如何处理 viewpager2 中的 edittext 焦点

How to handle focus of edittext inside viewpager2

我有一个包含 5 个片段的 viewpager2,最后一个片段有 Edittext 问题是,每次用户选择最后一个片段时,我都想向我的编辑文本请求焦点()。

我尝试过的:

  1. 使用 registerOnPageChangeCallback(),但问题是,我无法请求关注页面更改,因为它会导致 NPE。
  2. 使用 onresume、onattach 等,其中 None 当用户在 fragment
  3. 之间切换时调用
  4. 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也只恢复当前片段。