android - 在 Fragment 中设置焦点

标签 android android-fragments

我有以下情况:

一个 Activity ,有一个 Fragment-A。

在用户输入时,使用以下代码添加一个新 fragment (我们称它为 Fragment-B):

ft.add(R.id.content_frame, fragmentB);

现在,当我按回键时, fragment B 会按预期销毁。

由于 fragment B 被添加(而不是替换),所以没有回调到 fragment A 的 onResume()

我需要在 fragment B 被销毁后立即设置 fragment A 的焦点。

我使用下面的代码来设置焦点:

getView().setFocusableInTouchMode(true);
getView().requestFocus();

有什么办法可以实现吗?

最佳答案

对于那些正在努力在 Fragment(添加 fragment 且未替换 fragment 时) 中获得“回调”的开发人员,可以尝试以下方法:

使用 addOnBackStackChangedListener 为 fragment 返回堆栈的更改添加一个新的监听器。

我在 Fragment-A 的 onCreate() 方法中添加了这个 addOnBackStackChangedListener,如下所示:

getFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() {

            @Override
            public void onBackStackChanged() {
                if (getView()!=null){
                    getView().setFocusableInTouchMode(true);
                    getView().requestFocus();       
                }               
            }
        });

现在,一旦 Fragment-B 被销毁,onBackStackChanged 就会被调用,我就可以设置焦点了。

当然,你可以在onBackStackChanged里面写任何你想在Fragment销毁时执行的代码。

关于android - 在 Fragment 中设置焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29746092/

相关文章:

android - 如何在 android 中禁用 GestureListener?

android - 如何检测用户何时点击 Android 中的 View

带有抽屉 + 工具栏 + fragment 的 Android App 模板

java - 将变量传递给已创建的 fragment 并重新加载它

java - Android AsyncTask 不执行 doInBackground

android - 在android中从第三个 fragment 返回到第一个 fragment

java - Android - openCV,获取图像的一部分 - 奇怪的行为

在 Activity 中单击后退按钮时 Android Studio 运行命令

java - 如何限制 fragment 中的后退 Action

android - ViewPager 中的不同配置