Android爬坑记录

在开发过程中遇到这么一个需求:
需要一个可折叠的列表并且在子列表中有EditText的输入和回显的交互

可折叠的列表很自然的就想到了google的原生控件ExpandableListView
但是知道为什么ExpanableListView好像并不怎么友好,在使用过程中发现好多不可思议的地方比如说getChildView会刷两次。好了闲话不多说,问题要逐一解决,先来谈谈解决ExpandListView和EditView的问题。

思路一:
为EditView设置内容监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
holder.label_et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String text = holder.label_et.getText().toString();
if(!TextUtils.isEmpty(text)){
item.setLable(text);
}
}
});

发现问题很诡异,afterTextChanged 被执行了很多遍,最后失败告终。
看日志感觉解释不清楚就先不贴了,有时间研究下。

思路二:在EditText焦点发生变化的时候再获取文本内容

1
2
3
4
5
6
7
8
9
10
11
holder.label_et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
String text = holder.label_et.getText().toString();
if(!TextUtils.isEmpty(text)){
item.setLable(text);
}
}
}
});

完美解决。

盛艳明 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!