简书链接:spinner坑爹bug导致编辑框输入内容错乱到另外编辑框
文章字数:263,阅读全文大约需要1分钟
编辑框冲突、 选择这个编辑框输入内容到了另外一个编辑框,有时候光标不闪烁,甚至键盘都无法弹出了!!!!!! 甚至有时候卡死无法返回退出
有时候按返回关闭都无效,竟然是spinner导致的,spinner无数据的时候我点击了它,就出现了这个问题,我之前以为是某手机问题,坑爹!!!!!!!!!!!!!!!!!!!!!!!11
这问题困惑我很久了,我以为是自定义编辑框有问题,各种排查好像问题依然存在,然后以为是databind问题又以为是lock databind标记问题,各种排除法,终于找到真凶!!!!!!!!
这是我的解决办法,把所有spinner都给替换了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

/**
* Author:Lozn
* Email:[email protected]
* 修复为空点击了后导致卡死问题
* 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);
}