开发经验(记录一些开发时遇到的小细节) - lydGit/Notes GitHub Wiki
List的remove最好使用remove(int index)而不是remove(Object object).
因为remove(Object object)需要使用到对象中的equals(Object obj)方法。当同时出现多个地方需要不同判断时,管理起来比较复杂!当List循环remove(int index)时,因为列表长度会变,会造成数据删除错误!(目前解决方法是保存未删除数据生成新的列表,达到剔除数据的目的|i-1)
自定义View的onMeasure方法
当你在xml中使用match_parent或指定大小(100dp)的时候,onMeasure中能获取到控件的大小。如果使用的是wrap_content,那得到的大小就为0,这时候就要重新计数
RecyclerView中EditText的输入监听处理
1:在adapter中给EditText赋值时会触发其中的输入监听,导致输入数据错误,所以在赋值前必须把EditText中的输入监听移除掉 2:EditText添加输入监听的方法为addTextChangedListener,可以为一个EditText添加多个输入监听。特别在列表的重用机制中,EditText会被添加多个输入监听,这样会导致数据监听出现异常,所以必须保持每个EditText只有唯一的addTextChangedListener,多余的必须移除掉。可以将listener保存在EditText的Tag中,重用的时候再移除掉 3:在addTextChangedListener中刷新RecyclerView会报错奔溃,原因基本是因为布局在滑动计算统计中不能刷新UI。我们可以在赋值前添加判断,并在赋值完成后改变判断值,且在刷新前对该值进行判断
protected void convert(DefinedViewHolder helper, S item) { isNotify = true; setText(helper, item); isNotify = false; } if (!isNotify) { notifyDataSetChanged(); }
Fragment嵌套Fragment
在添加Fragment中添加Fragment时,使用的FragmentManager须使用getChildFragmentManager()方法获取的,如果使用getFragmentManager()方法获取,则子Fragment无法通过getParentFragment()获取父方法