我有以下情况:
一个 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/