Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用自定义构造函数设置BaseActivity以从子类提供数据_Java_Android_Inheritance - Fatal编程技术网

Java 使用自定义构造函数设置BaseActivity以从子类提供数据

Java 使用自定义构造函数设置BaseActivity以从子类提供数据,java,android,inheritance,Java,Android,Inheritance,我在我的应用程序中使用了一个BaseActivity来帮助谷歌分析变得更简单 在我的基本活动中,我覆盖了onStart()和onStop(),将一些内容发送到EasyTracker。我想设置我的代码,这样它需要我用活动的名称调用超类构造函数,这样BaseActivity就可以发送正确的数据 我尝试在BaseActivity中设置一个构造函数,它似乎可以工作,但我得到的错误是我的主活动(扩展了BaseActivity)层次结构不一致 我能做些什么来实现这一点呢?你不能用构造函数来实现这一点。And

我在我的应用程序中使用了一个
BaseActivity
来帮助谷歌分析变得更简单

在我的基本活动中,我覆盖了
onStart()
onStop()
,将一些内容发送到EasyTracker。我想设置我的代码,这样它需要我用活动的名称调用超类构造函数,这样
BaseActivity
就可以发送正确的数据

我尝试在
BaseActivity
中设置一个构造函数,它似乎可以工作,但我得到的错误是我的主活动(扩展了
BaseActivity
)层次结构不一致


我能做些什么来实现这一点呢?

你不能用构造函数来实现这一点。Android框架实例化了Android组件(
服务
活动
广播接收器
内容提供者
)本身,你不能随意使用


我的建议是在基本活动中重写
onCreate()
,并让子类从其重写的
onCreate()
方法调用
super.onCreate()
。在您的基本活动中,您可以通过调用
getClass().getName()

来获取子类的名称绝对回答了我的问题,非常感谢。目前我正在做类似的事情,直到找到更好的方法,但是我需要发送一个实际的字符串作为名称,因为类名不适合我的需要。有什么消息吗?当然有。在基类中,不要重写
onCreate()
。而是编写自己的方法,如
protectedvoid onCreate(Bundle savedInstanceState,String activityName)
调用
super.onCreate()
并保存
activityName
。然后,在子类中,它应该重写
onCreate(Bundle savedInstanceState)
,并在其中调用
onCreate(savedInstanceState,activityName)
。同样,它工作得很好,谢谢。是否有任何方法可以使我在扩展我的
BaseActivity
的任何类中调用该方法?好的,在编译时没有任何方法强制这样做。但是您可以做的是在基类中有一个私有成员变量,该变量被初始化为
false
。然后,在基类的
onCreate()
中,将此变量设置为
true
,以指示基类
onCreate()
方法已被调用。然后,在基类的重写的
onStart()
中,检查变量是否已设置为
true
。如果没有,您可以抛出一个异常,说明“子类必须调用
super.onCreate(savedInstanceState,activityName)