2

我已经在我的应用程序中实现了 ActionBar Tab。但是我在标签更改期间面临一个问题。我的标签主要包含 webview,但一个标签包含编辑文本。当我点击编辑文本时,键盘会出现,如果我正在更改标签,键盘会出现,键盘不会消失。我尝试了一些简单的解决方案,比如明确隐藏它,但没有成功。

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 mgr.hideSoftInputFromWindow(fragment.getView().getApplicationWindowToken(), 0);

我正在调用实现 ActionBar.TabListener 的类的 onTabSelected()。我不知道如何解决这个问题,也没有获得相关信息。

提前致谢。任何帮助将不胜感激。

更新和回答

Eric 的回答在某种程度上给了我一个推动力并帮助我得到了答案,所以我用我的改变将他的答案标记为正确。即我在我的onTabUnselected而不是tabSelected 中添加了eric 的代码,因为当我试图获取视图时,视图没有被创建,因此视图为空。所以我的最终代码是

@Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft)
    {
        View target = initialisedFragment.getView().findFocus();

        if (target != null) 
        {
            InputMethodManager mgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            mgr.hideSoftInputFromWindow(target.getWindowToken(), 0);
        }
    }
4

2 回答 2

2

我不相信您可以选择 aView并将其用作窗口令牌。您必须找到当前显示键盘的字段。

这是我以前使用过的方法的一个端口,值得一试:

View target = fragment.getView().findFocus();
if (target != null) {
    InputMethodManager imm = (InputMethodManager) target.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(target.getWindowToken(), 0);
}

如果这不起作用,则有许多其他方法被报告为有效

于 2012-07-26T06:01:47.780 回答
0

我使用以下选项来捕获设备正在工作的当前视图:

public final void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) {
        View focus = getCurrentFocus();
        if (focus != null) {
            hiddenKeyboard(focus);
        }
    }
public final void onTabselected(Tab tab, FragmentTransaction fragmentTransaction) {
        View focus = getCurrentFocus();
        if (focus != null) {
            hiddenKeyboard(focus);
        }
    }
public final void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) {
        View focus = getCurrentFocus();
        if (focus != null) {
            hiddenKeyboard(focus);
        }
    }
于 2014-01-28T10:03:35.380 回答