解决RecycleView局部刷新iteam时, EditText抢占焦点问题

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

QQ20181217-120614.gif

解决了好久,解决的思路为:

  1. EditText在xml设置如下代码,这样清除的时候才会生效
android:focusable="true"
android:focusableInTouchMode="true"
  1. 当点击其他条目的时候,手动关闭软键盘,用 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();

                }
            }

        });
  1. 当再次点击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);// 显示输入法
    }
}); 

这样就可以解决上面的问题,具体效果如下

QQ20181217-135401.gif

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

你可能感兴趣的:(解决RecycleView局部刷新iteam时, EditText抢占焦点问题)