spinner坑爹bug导致编辑框输入内容错乱到另外编辑框
2021-11-08 本文已影响0人
吉凶以情迁
编辑框冲突、 选择这个编辑框输入内容到了另外一个编辑框,有时候光标不闪烁,甚至键盘都无法弹出了!!!!!! 甚至有时候卡死无法返回退出
有时候按返回关闭都无效,竟然是spinner导致的,spinner无数据的时候我点击了它,就出现了这个问题,我之前以为是某手机问题,坑爹!!!!!!!!!!!!!!!!!!!!!!!11
这问题困惑我很久了,我以为是自定义编辑框有问题,各种排查好像问题依然存在,然后以为是databind问题又以为是lock databind标记问题,各种排除法,终于找到真凶!!!!!!!!
这是我的解决办法,把所有spinner都给替换了
/**
* Author:Lozn
* Email:qssq521@gmail.com
* 修复为空点击了后导致卡死问题
* 2021/11/8
* 15:34
*/
public class FixBugSpinner extends AppCompatSpinner {
public FixBugSpinner(@NonNull Context context) {
super(context);
}
public FixBugSpinner(@NonNull Context context, int mode) {
super(context, mode);
}
public FixBugSpinner(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean performClick() {
if (emptyBreak(null)) {
return true;
}
return super.performClick();
}
public FixBugSpinner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public FixBugSpinner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int mode) {
super(context, attrs, defStyleAttr, mode);
}
public FixBugSpinner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int mode, Resources.Theme popupTheme) {
super(context, attrs, defStyleAttr, mode, popupTheme);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (emptyBreak(event)) {
if (event != null && event.getAction() == MotionEvent.ACTION_DOWN) {
return true;
}
return false;
}
return super.onTouchEvent(event);
}
private boolean emptyBreak(MotionEvent event) {
if (getAdapter() == null) {
if (event!=null&&event.getAction() == MotionEvent.ACTION_DOWN) {
Toast.makeText(getContext(), "当前下拉列表无内容!", Toast.LENGTH_SHORT).show();
}
return true;
}
if (event!=null&&getAdapter().getCount() == 0) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Toast.makeText(getContext(), "当前下拉列表无内容", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
/* if (emptyBreak()) {
if(ev.getAction()==MotionEvent.ACTION_DOWN){
return true;
}
return true;
}*/
return super.dispatchTouchEvent(ev);
}