android - 软键盘不隐藏

标签 android listview android-fragments android-softkeyboard

我的应用有一个包含三个 fragment 的 Activity 。第一个 (Frg1) 和第三个 (Frg3) fragment 中有 ListView 。第二个 fragment (Frg2) 有一个 editText。 当我启动 Frg2 时自动显示软键盘。这是正确的。 我试试 Frg2.onPause 这段代码

@Override
public void onPause() {
    super.onPause();

    editText.post(new Runnable() {
        @Override
        public void run() {
            editText.clearFocus();
            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
        }
    });
}

当我在 Frg3 软键盘隐藏后启动 Frg1 或 Frg2 但在渲染 Frg1/Frg2 键盘后再次显示时。

代码示例(在 Frg3 中):

@Override
public void onResume() {
    super.onResume();
    editText.requestFocus();
}

        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            editText.post(new Runnable() {
                @Override
                public void run() {
                    imm.showSoftInput(editText, 0);
                }
            });
        }
    });

在 Manifest.xml 中

<activity android:name=".ContentActivity"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:screenOrientation="portrait"
          android:windowSoftInputMode="adjustResize" >

可能是什么问题?

更新

我找到了解决方案

1。删除

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            editText.post(new Runnable() {
                @Override
                public void run() {
                    imm.showSoftInput(editText, 0);
                }
            });
        }
    });

2。添加

@Override
public void onResume() {
    super.onResume();
    editText.requestFocus();
    imm.showSoftInput(editText, 0);
}

@Override
public void onPause() {
    super.onPause();
    View v = getActivity().getCurrentFocus();
    if(v != null) {
        v.clearFocus();
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
    }
    editText.clearFocus();
}

谢谢大家!

最佳答案

我找到了解决方案

1。删除

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        editText.post(new Runnable() {
            @Override
            public void run() {
                imm.showSoftInput(editText, 0);
            }
        });
    }
});

2。添加

 @Override
 public void onResume() {
    super.onResume();
    editText.requestFocus();
    imm.showSoftInput(editText, 0);
 }

3。添加

@Override
public void onPause() {
    super.onPause();
    View v = getActivity().getCurrentFocus();
    if(v != null) {
        v.clearFocus();
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
    }
    editText.clearFocus();
}

谢谢大家!

关于android - 软键盘不隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31241352/

相关文章:

java - onStop后如何不杀死进程?

android - 奇怪的行为 - VideoViewer fragment 无法与 MediaController 一起使用

java - NullPointerException: 名称 == null

android - 为 Android 抽屉导航创建主要内容区域

android - 在 Windows 10 上使用 Cmake 编译 Heimdall

java - Android Volley 错误 : com. android.volley.ClientError

java - Android 切换按钮保存状态自定义 ListView

android - 每个 ListView 行中的按钮按下状态问题

c# - 如何在 ListView 之外更改 ListView 的模式?

java - 刷新 listView : UnsupportedOperationException 时出现问题