最近在一个模版选择的功能,当选择否的时候,会填写问题照片和问题描述,在进行操作的时候遇到了一个问题,就是RecycleView局部刷新iteam时, EditText抢占焦点问题,问题如下:

解决了好久,解决的思路为:
- EditText在xml设置如下代码,这样清除的时候才会生效
android:focusable="true"
android:focusableInTouchMode="true"
- 当点击其他条目的时候,手动关闭软键盘,用 EditText设置键盘监听,当键盘关闭时,清楚exittext的焦点,这样就不会被抢占焦点的了
//监听软键盘是否显示或隐藏
viewHolderChild.etDescription.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
viewHolderChild.etDescription.getWindowVisibleDisplayFrame(r);
int screenHeight = viewHolderChild.etDescription.getRootView()
.getHeight();
int heightDifference = screenHeight - (r.bottom);
if (heightDifference > 200) {
//软键盘显示
viewHolderChild.etDescription.setFocusable(true);
} else {
//软键盘隐藏
viewHolderChild.etDescription.clearFocus();
}
}
});
- 当再次点击EditText的时候,然后给EditText设置获取焦点,找到焦点,然后手动弹起软键盘,方便用户输入
//设置获取焦点
viewHolderChild.etDescription.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolderChild.etDescription.setFocusable(true);
viewHolderChild.etDescription.setFocusableInTouchMode(true);
viewHolderChild.etDescription.requestFocus();
viewHolderChild.etDescription.findFocus();
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(viewHolderChild.etDescription, InputMethodManager.SHOW_FORCED);// 显示输入法
}
});
这样就可以解决上面的问题,具体效果如下

记录一下自己的问题,方便以后查找,希望多多积累,可以是自己充实,加油
网友评论