介绍一下任务,我通过recyclerview嵌套实现了表格样式,表格随着数据的变化会动态生成,而且Edittext中输入的数字要进行一定算法的统计
出现问题:
Edittext输入字符后会失去焦点
分析思路:
Edittext 添加了 TextChangedListener,在afterTextChange中有刷新列表的操作,由此可见,焦点从Edittext转移到了listview上面
viewHolder.editView.addTextChangedListener(mtext); viewHolder.editView.setTag(mtext);
解决办法 :
记录下发生变化的行,列值,在RecyclerView 刷新时使用获得焦点
viewHolder.editView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
index_col =column;
index_row =row;
}
return false;
}
});
值得深思的一点,直接 调用
viewHolder.editView.requestFocus(); edittext无法获取焦点
后期进行延时处理一下就可以了,没有深入去看源码但是初步感觉是由于异步和时差的原因,由此
想到我前几天(赋值失败)的一篇文章,估计问题的原因应该也差不多!
https://mp.csdn.net/mp_blog/creation/editor/135932041
viewHolder.editView.addTextChangedListener(mtext);
viewHolder.editView.setTag(mtext);
if (index_col == column && index_row == row) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewHolder.editView.requestFocus();
}
},20);
}
总结一下:edittext失去焦点我的第一反应是软键盘抢走了它的焦点,但是冷静下来发现的我思路不对,因为我的布局嵌套很复杂,首先应该考虑的是editext的父布局原因,应该向上逐级排查
出现问题先别急着百度,会把自己弄乱,先自己弄清楚方向,不要盲目,与大家共勉