vapor开发随笔

2017-08-31  本文已影响0人  没去杜克
removeallview确实会移除所有的view,但是在addview的时候还是会报remove first?
设置emptyview的时候 事先要判空,
因为在当前页面切换其实会创建多个emptyview 你再去remove会还是存在,
判空保证只有一个empty实例存在。
android:imeOptions="actionSearch"要生效
必须设置 android:inputType="text"android:maxLines="1"
在addview之前 多考虑是否需要想removeview。
addview或者remove都默认requestlayout invalidate
listview和recycleview都是有缓存机制的 而且相似 都是可见即可得 
只不过listview需要手动配置而rv不需要,
使用他们的getchildAt和findViewByPosition都会因为这个原因拿不到所有的view而返回null。
解决办法:先理解两种条目view的原理及缓存机制。
listview里用getview处理,这个方法是绑定数据到各子view,在里面能更新所有item的view。
recycleview则在onBindViewHolder里,这个方法相当于listview的getVIew。
这些条目view都使用缓存机制的原因很大程度上缓解了OOM。
分页设计和这些view的缓存机制都在很大程度缓解出现OOM这种情况。
checkbox设置android:button="@null"可以屏蔽默认背景框
editText设置父控件 的android:focusable="true"
android:focusableInTouchMode="true"则初始不会弹出输入法
editText设置android:focusable="false"会让editText不能被改变
recyleview的item更新 如果是一个任务接着一个(比如删除之后再更新),
尽量用notifyDataSetChanged,
其他有可能会报Inconsistency detected. Invalid item position
recyleview的子view进行状态更新也是可见才去真正更新。
在进行购物车页面的钱数统计的时候,最好的处理周期就是onWindowFocusChanged这个方法内。
checkbox的setcheck方法也会出发它的监听setOnCheckedChangeListener。
一般情况下的字符串拼接用+就行,内部也是用的StringBuilder的append来实现,
会进行如果是循环大量字符串的连接一定要用append方法,
因为会在循环体内部创建StringBuilder,这样会造成内存浪费。
用StringBuilder进行append只会有一个StringBuilder对象。减少内存损耗。两者速度也相差很多。
android:isIndicator="true" 设置ratingbar不可点击
想在activity中finish另一些activity:
1先把要finish的存起来
public void addOrderActivity(Activity activity) {
 if (activity != null) {
 orderActivityList.add(activity);
 } }
2然后集中finish
 public void finishOrderActivity() {
 for (Activity activity : orderActivityList) {
 if (activity != null) {
activity.finish();
}}}
特别注意setText(@StringRes int resid)方法 在用的时候尽量设置string char这样的字符类型。
不然 android.content.res.Resources$NotFoundException: String resource ID #0xc8
要比较IMageVIew的背景图片是否相等:
gouIv.setImageResource(R.drawable.def_yes_ic);
gouIv.setTag(R.drawable.def_yes_ic);
int id = (int) gouIv.getTag();
先设置背景图片 settag 然后取得id 进行比较
listview和RecyclerView的getChildAt(int position) 只能获取可见的条目信息。
解决办法 
getChildAt(position-listview.getFirstVisiblePosition());
RecyclerView推荐用View view =LayoutManager.findViewByPosition(2);
listview.performItemClick(listview.getChildAt(0), 0, listview.getItemIdAtPosition(0));
在listview的item没有被点击过之前,这个listview.getChildAt(0)有可能是null的,也就意味着
onItemClick(AdapterView<?> parent, View view, int position, long id)
这个回调方法中的view是null,这个view代表着被点击的那个item view。
解决window被NavigationBar遮挡和widow被输入法顶起
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
List = 排成一长队的小猪 
Map = 放在一个个有房间号的屋子里面的一群小猪 
Set = 一群小猪贴上号,然后赶到一个猪圈里
Hashset 它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。
LinkedHashSet定义了迭代顺序,即按照将元素插入到集合中的顺序(插入顺序)进行迭代。
edittext隐藏光标setCursorVisible
listview item不响应onitemclick
原因:焦点被item里的子view夺去。
解决:在item的父layout设置android:descendantFocusability="blocksDescendants"
ListString[] array = (String[]) mlist.toArray(); 异常
这样写的话,编译运行时会报类型无法转换java.lang.ClassCastException的错误
因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,
所以将整个List强制转换是不行的
EditText点击才获取焦点
使得et一进页面先不获取焦点,点击则获取焦点调出输入法键盘。
android:focusable="true"
android:focusableInTouchMode="true"
执行打开相册或相机代码 onActivityResult null
再打开相机或相册等需要配置一些指定参数的场景下,携带的自定义bundle数据在onActivityResult里面
通过 Bundle bundle = data.getExtras();
bundle是null的。不能进行自定义bundle传输。
iterator.next调用第二次的问题
迭代器iterator每次调用next()获取当前cursor对应的值,都会移动curcor++,指向下一个。
如果你想获取同一个位置的数据,切记不可两次连续调用next()去取。
view.post和handler.post 
view.post在主线程中有效。
如在oncreate里view.post,调用getRelatedAttributeValue有效。
在onAttachedToWindow中handler.post,调用getRelatedAttributeValue有效
RecyclerView在GridLayoutManager时,各item间可能会出现大小不一的间隙。尤其是左右之间。
解决办法:把item的根布局设置为android:layout_width="match_parent"
设置间距:
class MarginDecoration extends RecyclerView.ItemDecoration {
 private int margin; 
 public MarginDecoration(Context context) {
 margin = PxUtils.dpToPx(10,context); } 
@Override
 public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
outRect.set(margin, margin, margin, margin); 
} }  
application static值为空的情况
android虚拟机不同于java se的虚拟机,static变量会被绑定在某个activity上,
也就是说activity的消亡会让这个变量为空,其他地方使用的时候就是null。
解决办法:可以存储在本地缓存 数据库都行,然后用的时候判空,为null就去本地或者数据库取出来。
float不能保证第八位的精确
例如:String="997033.23"
float v = Float.parseFloat(amount);
可能会出现v="997033.25的情况。
最多只能保证第七位的精确,所以超出的位数都不能保证值的精确度。
父类里面protected修饰符
特别注意内部类父类里面的修饰符
protected有可能会造成相同名字的类引用错误。
同名引用如果不打算暴露,最好设置成private
animation动画不执行
view.clearAnimation();
//在开始动画前 执行这句 可解决动画不执行的问题
获取安装成功的apk包名
在apk安装成功监听,Intent.ACTION_PACKAGE_ADDED
String pkg = intent.getDataString();//获取安装包名
不是intent.getPackage();
Textview父类
textview的上层父类是View
textview是button的上层父类。
checkbox是一个button。
上一篇下一篇

猜你喜欢

热点阅读