【问题标题】:How to handle focus of edittext inside viewpager2如何处理viewpager2中edittext的焦点
【发布时间】:2020-07-05 19:37:51
【问题描述】:

我有一个带有 5 个片段的 viewpager2,最后一个片段有 Edittext 问题是,每次用户选择最后一个片段时,我都想向我的 edittext 请求focus()。

我尝试过的:

  1. 使用 registerOnPageChangeCallback(),但问题是,我无法请求关注页面更改,因为它会导致 NPE。
  2. 使用 onresume、onattach 等,当用户在片段之间切换时,它们都不会被调用
  3. Setuservisisiblehint 已弃用

对此问题的任何想法将不胜感激 谢谢

编辑:

对不起,我忘了说

我的 Viewpager(parent) 位于其他 viewpager2(child) 的最后一个片段中。所以我有 viewpager2(parent),最后一个片段包含我的 viewpager2(child)。 当我选择“孩子”的最后一个片段时,我可以将焦点设置为编辑文本。但问题是当我更改“父”选项卡并返回包含“子”的最后一个片段时。我不能告诉“孩子”重新集中注意力。

是的 Onresume 和 onpause 在“父”片段而不是“子”片段中工作

谢谢

【问题讨论】:

  • 我正在使用带有 tablayout 的 viewpager2 来显示两个片段,其中一个片段有一个编辑文本,但是当我选择编辑文本时键盘没有出现,你的工作吗?我指的是这个问题github.com/android/views-widgets-samples/issues/107

标签: java android android-edittext android-viewpager


【解决方案1】:

您可以 requestFocus ,在最后一个片段的 onResume 方法中,使用 Viewpager2 任何屏幕外片段都被限制在 onStarted 并在完全在屏幕上时恢复。

我不知道你为什么这么说:-

使用 onresume、onattach 等,当用户在片段之间切换时,它们都不会被调用

除非您在这里谈论的是Activity's onResume

此行为没有得到很好的记录,但您可以在发行说明中看到该功能 https://developer.android.com/jetpack/androidx/releases/viewpager2#1.0.0-alpha06

FragmentStateAdapter:非主项 Fragment 的上限为 STARTED,并且它们的 menuVisibility 设置为 false。

https://developer.android.com/jetpack/androidx/releases/viewpager2#1.0.0-beta05

修复了更改页面时片段暂停/恢复事务的顺序(我们现在总是在恢复新的主要项目之前暂停旧的主要项目)。 (b/139489059)

你还说:-

Setuservisisiblehint 已弃用

这不是 Viewpager2 的一部分,但原始的 viewpager 和原始的 viewpager 也只恢复当前片段。

【讨论】:

  • 感谢您的回答,我编辑了问题。我忘了告诉你,我们首先讨论的viewpager(child)在其他viewpager2(parent)的最后一个片段中。请帮我。之前谢谢你
  • 编辑一些代码后。该代码有效,感谢您提及检查简历和暂停。你拯救了我的一天
【解决方案2】:

你可以requestFocus,在最后一个片段的onCreateView方法或活动中的onActivityCreated方法,虽然我从来没有使用过最后一个。

请记住,为了在 EditText 中requestFocus,您需要先在触摸模式下启用可聚焦。

您可以通过 XML 执行此操作: android:focusableInTouchMode="true" 或使用 Java: editText.setFocusableInTouchMode(true);

【讨论】:

  • 感谢您的回答。但 onCreateView 仅在首次创建时调用。如果用户更改页面然后再次转到最后一个片段,则不会调用任何方法(oncreate、oncreatview、onattach、ondetach、onresume、onstart、onstop、ondestroy)
  • 嗯,你可以使用 onActivityCreated 或 onViewStateRestored 并聚焦 EditText
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2011-12-26
相关资源
最近更新 更多