软键盘无法隐藏

时间:2015-07-06 08:45:24

标签: android listview android-fragments android-softkeyboard

我的应用有一个包含三个片段的活动。在第一个(Frg1)和第三个(Frg3)片段中有listview。第二个片段(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 个答案:

答案 0 :(得分:1)

我找到了解决方案

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();
}

全部谢谢!