gpt4 book ai didi

java - 多次调用 onFocusChange 导致 "hasFocus"变量不可用

转载 作者:行者123 更新时间:2023-11-29 18:31:32 24 4
gpt4 key购买 nike

我有两个 EditText 小部件,当用户在这些小部件之外单击时,我想隐藏键盘(如果当时键盘显然仍然处于 Activity 状态)。为此,我对它们都使用了 setOnFocusChangeListener,如下所示:

eTNom=convertView.findViewById(R.id.EditText_nom);

eTNom.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus)
hideKeyboard(v);
}
});

另一个 setOnFocusChangeListener 的处理方式完全相同。

但是这不起作用,因为每次我单击两个 EditText 之一时都会调用多次 (4-5) onFocusChange 方法。这导致 hasFocus 变量在调用该方法后迅速在 true 和 false 之间切换,并且键盘只显示很短的时间。

这正是正在发生的事情:https://imgur.com/ZFjXPPz

我见过这个问题被问过一次,但接受的答案建议在 list 文件中添加 android:windowSoftInputMode="adjustPan"。我这样做了,但没有解决我的问题。我还看到有人建议在父布局中将 clickablefocusablefocusableInTouchMode 属性设置为 true,这样我也做了,但还是不行。

我认为问题出在我有两个 EditText 小部件,但是当我从我的 Activity 中删除一个小部件时,我仍然遇到同样的问题,所以我现在几乎迷失了方向非常感谢您的帮助。

谢谢。

最佳答案

在 Menifest 中添加以下行

<activity android:name=".ActivityName"
android:windowSoftInputMode="stateHidden" />

或者您可以使用以下两个函数显示/隐藏键盘

public void hideSoftKeyboard() {
if(getCurrentFocus()!=null) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}

/* Shows the soft keyboard */
public void showSoftKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
view.requestFocus();
inputMethodManager.showSoftInput(view, 0);

关于java - 多次调用 onFocusChange 导致 "hasFocus"变量不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56004525/

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