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

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

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

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

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

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

你可能感兴趣的:(安卓,RecycleView,EditText抢占焦点)