在android客户端中我们经常有自己的定义视图,特别是用fragment的时候,用的还是比较多的,有时候很多响应时间都是在VIew里面完成,发现有时候调用activity的方法都是碰到就搞了,后来越来越发现有些调用底层的硬件的方法是没法搞的,只能重新传递context过来,所以整理了下 目前遇到这样的问题大概用到了两种方法
首先是自定义视图:
public class BasicLineView extends LinearLayout{}
这是我自定义的视图,这个类必须有个构造函数:
代码语言:javascript复制 public BasicLineView(Context context) {
super(context);
this.context = context;
}
这个构造参数就是上下文 context 如果在其他的类中用到这个自定义视图,我们只需要构造就行了
1)直接使用 this.mAct =(Activity) context; 进行转换
一般这样构造:比如在activityA中
方法一:
Context mCt = this.getApplicationContext();
构造:new BasicLineView(mCt)
方法二:
直接构造 :new BasicLineView(this)
这两个方法是有区别的,区别很大的,导致你后面调用底层方法是没法用的,换句话说就是无法转换
方法一 其实少用,只是有时候我们用了第三方插件,他需要你传递的context获取是 this.getApplicationContext();这种形式的,比如百度地图
这种传递context 他实际基类是 application的,不是activity的,这样就无法从context直接转成activity了,
方法二 是可以直接转换的,他的确定就是传递的上下文如果碰到第三方插件需要的context是没法直接用的,还需要再转化下,还有其他的情况也是无法直接使用的,
2)使用接口来搞定调用底层的方法
这个方法是很安全的一种方法,就是搞起来比较麻烦,代码要写好多,那像上面的方法一句话,强制转换,各有各的好处,
接口的做法就是先在View里面写上一个接口,然后再写个activity类,实现这个view