Android小问题的处理

1.view事件的终止与向下分发与回朔总结:
ViewGroup 想把自己分发给自己的onTouchEvent,需要拦截器onInterceptTouchEvent方法return true 把事件拦截下来。
ViewGroup 的拦截器onInterceptTouchEvent 默认是不拦截的,所以return super.onInterceptTouchEvent()=return false;
View 没有拦截器,为了让View可以把事件分发给自己的onTouchEvent,View的dispatchTouchEvent默认实现(super)就是把事件分发给自己的onTouchEvent。
2.跳转activity将之前所有的activity栈清空掉:
如:开发中遇到的退出登录需要将之前打开的所有activity栈处理掉。
解决办法:Intent intent = new Intent(A.this,B.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
原理说明:startActivity 的时候传递 FLAG_ACTIVITY_CLEAR_TASK 这个标志,那么这个标志将会清除之前所有已经打开的 activity .然后将会变成另外一个空栈的 root ,然后其他的 Activitys 就都被关闭了.这个方法必须跟着 {@link #FLAG_ACTIVITY_NEW_TASK} 一起使用.
3.简单粗暴的内存溢出(OOM)的解决办法
解决思路:当在应用测试的时候,应用在绝大部份的机型上是可以正常跑的,在少部份 的的机型上出现OOM,除了对代码做出优化外,我们还可以让系统给应用分配更大的内存空间。
解决办法:<application
.......
android:largeHeap="true"
.........
/>
4.AlertDialog对话框设置点击其他地方对话框不消失
解决办法:android4.0以上AlertDialog在触摸对话框边缘的时候,对 话框会消失,我们可以设置这么一条属性让对话框不消失,当让必须要AlertDialog.bulid.create()才可以调如下两个方法。
方法一:setCanceledOnTouchOutside(fase)设置后按对话框外边缘回不起作用,按返回键还会起作用。
方法二:setCancelable(false)调用这个,按对话框外边缘与饭后见都不起作用,对话框都不会消失。
5.Scrollview显示不全
解决办法:有时候Scrollview嵌套linearlayout时会出现显示不全的问题,这时要看看Scrollview的父布局是不是使用了CoordinatorLayout,当父布局使用CoordinatorLayout时内部应将Scrollview替换为NestedScrollview,这样就不会产生意想不到的bug。
同样在CoordinatorLayout内部使用ViewPager与Tab layout来显示不同的fragment时,如果fragment内部使用Scrollview,则会出现界面显示不全的问题。
6.ListView分割线的问题
原理解释:list view是不能设置Divider和高度的,如果设置了,最后一个条目会显示不全,因为onMeasure时在测量list view的高度时并没有把Divider的高度设置进去。
7.Listview滚动条隐藏处理
解决办法:setScrollbarFadingEnabled(true)设置这个不滑动的时候隐藏,滑动 的时候显示。
setVerticalScrollBarEnabled(true)滑动与不滑动都隐藏。与这个效果一样的还有android:scrollbars="none"
8.RecyclerView item布局设置宽高无效的问题
原理解释:在adapter中插件viewholder加载布局有两种方式:第一种是: LayoutInflater.form(parent.getcontext()).inflate(R.layout.inflate_item,null),第二种方式是LayoutInflater.from(parent.getcontext()).inflate(R.layout.inflate_item,parent,flase),第一种root为null,这种方式没有指定将view加载到那个view上,也没有root的提供的layoutparams布局信息,这个时候调用view.getLayoutParams()就会返回null;第二种加载布局的方法root不为null,attachToRoot为false 这种加载方式,root不为null,但attachToRoot为false,因此加载的view不会添加到root上,但会用root生成LayoutParas信息这种法式item的宽高就不会失效。如果root不为null,attacToRoot为true的话,这是会将view添加到root上。根据recyclerview的源码分析,如果root为null则LayoutParas的信息使用的默认信息,而这个默认信息就是包裹内容,这就是为什么设置宽高无效的原因。
9.json数据解析细节注意
注意点: 在解析复杂的json串的时候,要从里往外解析,将从最里边开始分组javabean,一层一层往外解析。如果在解析的时候存在内部类的时候,要将这个内部类写成public static 的公共类。这样在json解析的时候就不会报json解析出错了。
10.IntentService
我们在做一些耗时的操作(比如上传一些文件,但我在上传的时候要干其他的事情这个时候我们要用到intentService)IntentService是一个基于service的一个类,用来处理异步的请求,我们可以通过startService(intent)来提起请求,该service会在会要的时候创建,当完成所有的任务后回自己关闭,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值