android里面自定义View实现调用activity的方法怎么做

来源:互联网 发布:mac mysql 编辑:程序博客网 时间:2024/04/29 07:58

在android客户端中我们经常有自己的定义视图,特别是用fragment的时候,用的还是比较多的,有时候很多响应时间都是在VIew里面完成,发现有时候调用activity的方法都是碰到就搞了,后来越来越发现有些调用底层的硬件的方法是没法搞的,只能重新传递context过来,所以整理了下  目前遇到这样的问题大概用到了两种方法


首先是自定义视图:


public class BasicLineView extends LinearLayout{}

这是我自定义的视图,这个类必须有个构造函数:

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


0 0
原创粉丝点击