gpt4 book ai didi

android - 如何在 setCanceledOnTouchOutside 事件取消 DialogFragment 时隐藏屏幕键盘

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:12 26 4
gpt4 key购买 nike

如果 edittext 当前获得焦点并且用户在 DialogFragment 外部单击;我希望屏幕键盘消失。当 DialogFragment 以这种方式关闭时,我可以让它工作:

InputMethodManager imm;
public View onCreateView(LayoutInflater inflator, ViewGroup container,
Bundle savedInstanceState) {
imm = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
...}

@Override
public void dismiss(){
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
super.dismiss();
}

但是,如果我在通过触摸 dialogfragment 外部取消它时尝试同样的事情,它将不起作用。我试图通过像这样覆盖 onCancel 来做到这一点:

@Override
public void onCancel(DialogInterface dialog){
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
super.onCancel(dialog);
}

当外部触摸事件发生但键盘未移除时调用该函数。

最佳答案

我能够通过子类化对话框并在执行对话框上的取消代码之前隐藏键盘来解决同样的问题。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity(), getTheme()) {
@Override public void cancel() {
if (getActivity() != null && getView() != null) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
}
super.cancel();
}

};
return dialog;
}

我尝试了许多替代方法,包括使用 DialogFragment 的 onCancel 和 onDimiss 监听器,但均无济于事。我认为问题在于在同步处理取消/取消时异步调用监听器;因此,当您的监听器被调用以隐藏键盘时,窗口 token 将不再存在。

关于android - 如何在 setCanceledOnTouchOutside 事件取消 DialogFragment 时隐藏屏幕键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16269466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com