- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用列表适配器(扩展 SimpleCursorAdapter)来填充一些数据。
我在 bindView 中调用 View.SetOnFocusChangeListener,我将监听器附加到所需的 EditText。问题是事件被触发 4 次,最终 EditText 失去焦点,直到我再次单击事件被触发 3 次并且 EditText 保持焦点。
我认为它应该只调用一次。OnTouch 事件是否对此负责?
这是我的代码:
@Override
public void bindView(View view, Context context, Cursor cursor) {
view.setId(cursor.getPosition());//Setting the row id to the corresponding cursor row id for easier data manipulation
super.bindView(view, context, cursor);
EditText etItemQuantity = (EditText)view.findViewById(R.id.etItemQuantity);
if(!isNumeric(etItemQuantity.getText().toString())) {
etItemQuantity.setFocusable(false);
etItemQuantity.setFocusableInTouchMode(false);
etItemQuantity.setClickable(false);
} else {
etItemQuantity.setFocusable(true);
etItemQuantity.setFocusableInTouchMode(true);
etItemQuantity.setClickable(true);
etItemQuantity.setOnFocusChangeListener(ofcl);
etItemQuantity.setOnEditorActionListener(oeal);
}
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = inflater.inflate(layout, null);
return view;
}
View.OnFocusChangeListener ofcl = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!(v instanceof EditText)) {
return;
}
EditText tableEt = (EditText)v;
if(hasFocus) {
tableEt.setTag(tableEt.getText().toString());
tableEt.setText("");
} else {
if(tableEt.getText().toString().equals("")) {
tableEt.setText(tableEt.getTag().toString());
tableEt.setTag(null);
}
}
}
};
最佳答案
在我的例子中,我在 API 24 中触发了两次 onFocusChange
。
editText.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
// ... hasFocus
}
container.setOnTouchListener { v, _ ->
editText.clearFocus()
hideKeyboard(editText)
v.performClick()
return@setOnTouchListener false
}
当用户在 EditText
之外单击时,我想从 EditText
中移除焦点。但是在 API 24 中,editText.clearFocus()
触发了 onFocusChange
两次。为了在 API 24 和 API 30 中设置类似的行为,我添加了 these行到 XML :
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/container"
....
android:focusableInTouchMode="true"
android:focusable="true">
<EditText ... />
您可以更改代码而不是 XML,但在 API 30 中可能会出现新问题:
editText.clearFocus()
hideKeyboard(editText)
v.performClick()
v.requestFocus() // 1.
v.requestFocusFromTouch() // 2.
return@setOnTouchListener false
关于Android onFocusChange 被多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23761658/
当焦点离开 TextEdit 框时,我想使键盘消失。我彻底搜索了 stackoverflow 和谷歌以获得答案,并尝试了我看到的每一个回复/文章,但似乎对我没有任何作用。 与许多人一样,我对 Andr
我有一个 Android 应用程序,在 xml 布局文件中我有这样的内容: 然后在我实现的java代码中 public void doneCheckBoxClicked(View v
在我的一个 Activity 中,我有三个 EditText 和一个 OK 按钮。 OnFocusChangeListener 设置为所有三个 EditText。每次失去焦点时都应触发监听器。 在 E
我有一个包含 2 个字段的表单,您可以在其中输入月份或年份。我如何设置表单,以便如果您输入年份,月份 edittext 字段将自动计算并输入到它自己的框中。同样,如果您输入月份,我希望计算年份 谁能给
我正在使用列表适配器(扩展 SimpleCursorAdapter)来填充一些数据。 我在 bindView 中调用 View.SetOnFocusChangeListener,我将监听器附加到所需的
我是 Android 编程的新手。 我下面的程序做了一个简单的华氏到摄氏的转换。如果您在华氏度中输入值 EditText每次输入的按键都会将其转换为摄氏度。 我收到以下错误,我在摄氏编辑文本中所做的更
我正在尝试使用 FadeInImage 显示整个屏幕背景图像,使用 onFocusChange 更改它们。 目前只有初始图像使用淡入淡出,然后图像才被替换。 寻求帮助: 如何使用 FadeInImag
我正在尝试为 setOnFocusChangeListener 构建一个内联函数 这是我到目前为止得到的: inline fun EditText.onFocusChange(crossinline
我已经按照本教程中的说明在扩展 View 类中创建了一个自定义按钮: http://kahdev.wordpress.com/2008/09/13/making-a-custom-android-bu
我试图在单击 EditText 时一致地调用某个函数。问题是,如果我实现 onClick,则第一次单击 EditText 时不会调用 onClick,并且当我添加 onFocusChange 来修复此
myEdit1.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode,
我在 Activity 中有一个 SearchView;当用户执行搜索时,一个包含搜索结果的 Fragment 被添加到同一个 Activity 中。 现在我想要的是当 SearchView 被点击时
我有两个 EditText 小部件,当用户在这些小部件之外单击时,我想隐藏键盘(如果当时键盘显然仍然处于 Activity 状态)。为此,我对它们都使用了 setOnFocusChangeListen
通常情况下,点击 View 时,文本光标会设置在您点击的位置附近。 我尝试将它始终设置为结束(超过最后一个字符),但除非 Action 被延迟,否则它什么都不做。 以下内容: new OnFocusC
我正在尝试获取所有事件(最大化、最大化等)。我从这个链接有一个合适的代码 How to Detect Window On Minimize/Maximize Event in Chrome Exten
focusable(_:onFocusChange:) 修饰符中的 onFocusChange 闭包允许我在 subview 获得焦点时为父 View 设置属性,如下所示: struct Conten
我正在尝试建立一个系统来验证用户输入,在这种情况下,只是检查用户输入的内容。 我有一个实用程序类,用于检查EditText 是否有数据。 我正在使用 OnFocusChangeListener,然后从
我生成多个 EditText在 for 循环中,并希望在焦点从 EditText 之一丢失时更新“分数”秒。我还想检查输入是否有效,如果无效,清空 EditText 并将焦点重新设置到它。 以下代码添
我试图在 onFocusChange 函数中使用 Listener 绑定(bind)来传递 View ,但出现以下错误 The callback android.view.View.OnFocusCh
VSCode 为 files.autoSave 启用以下选项: onFocusChange onWindowsChange 每个都有以下描述: 脏编辑器在失去焦点时自动保存。 当窗口失去焦点时,脏编辑
我是一名优秀的程序员,十分优秀!