美文网首页
vapor开发随笔

vapor开发随笔

作者: 没去杜克 | 来源:发表于2017-08-31 10:59 被阅读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。
    

    相关文章

      网友评论

          本文标题:vapor开发随笔

          本文链接:https://www.haomeiwen.com/subject/zwafjxtx.html