在Android应用的ViewPager片段中隐藏软键盘

9
我有一个包含ViewPager和2个fragment的Android应用程序。第一个fragment包含一个EditText字段。当应用程序启动时,该字段立即获得焦点并启动软键盘(我希望发生这种情况)。第二个fragment只包含一个列表(没有可编辑的文本字段)。当我从第一个fragment滑动到第二个fragment时,我希望键盘消失。我尝试过的所有方法似乎都不起作用。键盘不仅保持在视图中,而且它继续更新第一个fragment的EditText字段。
我认为我要么使用了错误的代码来隐藏键盘,要么将其放置在错误的位置。如果有人可以发布正确实现的示例,那将非常感激!
我最新的尝试是将应该隐藏键盘的代码放置在第一个fragment的onDetach()方法中:
@Override
public void onDetach()
{
    super.onDetach();

    InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE);

    // I'VE TRIED ALL THREE BELOW, NONE OF THEM WORK...

        // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(), 0);
        // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
3个回答

12

请看这个回答。 基本上,你需要在ViewPager的OnPageChangeListener中为自己隐藏键盘。(如果您希望您的滑动动画保持流畅,请在onPageScrollStateChanged而不是onPageSelected中执行此操作。)

@Override
public void onPageScrollStateChanged(int state)
{
    if (state == ViewPager.SCROLL_STATE_IDLE)
    {
        if (mViewPager.getCurrentItem() == 0)
        {
            // Hide the keyboard.
            ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);
        }
    }
}

0
在你的 AndroidManifest 中,应该在 Activity 的声明中添加 android:windowSoftInputMode="stateHidden":
<activity 
        android:name="YourActivity"            
        android:windowSoftInputMode="stateHidden">           
</activity>

在你的布局中,从EditText的子项中删除requestFocus:

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="15dp"
    android:ems="10" >
    <requestFocus />
</EditText>

这样做不会防止键盘一直显示吗?我只想在第二个片段中隐藏它。 - Jabari
这可以防止在活动加载您的片段时显示软键盘。但是,如果您单击某个EditText,则会显示软键盘。影响由您的Activity加载的所有片段。要始终隐藏并永远不显示软键盘,请在清单中使用android:windowSoftInputMode中的stateAlwaysHidden。对于我的英语表示抱歉。 - ClarkXP
几乎可以工作,但当您切换回不同的片段时,键盘并没有隐藏。 - Timmmm

0
    getActivity().getWindow().setSoftInputMode(
                  WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接