我创建了一个 recyclerview,其中有几个 EditText,当一个 EditText 根据给定规则更改时,所有其他 EditText 通过 onTextChanged 更改。
实际上问题本身:键盘设置为<EditText android:inputType="number" ... />
. 选择或键入其中一个 EditText 后,键盘将展开。如果此时你滚动并且之前选择的EditText从渲染区域消失了,而不是打开的数字键盘,出现一个字母键盘,如果你向后滚动并再次绘制相同的EditText,数字键盘将返回。
原来为了避免这种行为,有必要在recyclerview改变的时候,把键盘最小化吗?据我了解,onBindViewHolder 在适配器中对此负责吗?到目前为止,还无法从那里隐藏键盘,请帮助。
原来是通过onFocusChange隐藏的,但是在EditText中第一次输入后,键盘也崩溃了,即 就我而言,这不是一个选择...
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(v.getId() == R.id.editid && !hasFocus) {
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(v.getContext().INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
});
onBindViewHolder 不太可能帮助您获得理智的结果,因为 每当新元素出现在上方或下方时触发。我建议根本不要触摸适配器,而是创建自己的类,继承自 RecyclerView 和 onInterceptTouchEvent(MotionEvent event) 方法,如果 event.getAction == MotionEvent.ACTION_MOVE - 隐藏键盘。也就是说,当用户开始用手拖动列表时,键盘是隐藏的。不知何故,它会是这样的: