我正在使用列表适配器(扩展 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);
}
}
}
};
就我而言,我有onFocusChange
在 API 24 中触发了两次。
editText.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
// ... hasFocus
}
container.setOnTouchListener { v, _ ->
editText.clearFocus()
hideKeyboard(editText)
v.performClick()
return@setOnTouchListener false
}
我想将焦点从EditText
当用户点击外部区域时EditText
。但在 API 24 中editText.clearFocus()
fired onFocusChange
两次。为了在 API 24 和 API 30 中设置类似的行为,我添加了these https://stackoverflow.com/a/63229539/2914140线路到XML https://stackoverflow.com/questions/2150656/how-to-set-focus-on-a-view-when-a-layout-is-created-and-displayed:
<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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)