伴随对象 - Android 是否想将它们注册为活动(?)
Companion objects - does Android want to register them as activities (?)
我有一个Activity
class DummyActivity : Activity() {
companion object {
@JvmStatic fun onNewIntent(context: Context): Intent {
val intent = Intent(context, DummyActivity.javaClass)
return intent
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
在Manifest中声明如下:
<activity android:name=".DummyActivity"/>
</application>
当我尝试启动它时,我得到:
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class > {com.example.andrzejzuzak.visiondummyapp/com.example.andrzejzuzak.visiondummyapp.DummyActivity$Companion}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
at android.app.Activity.startActivityForResult(Activity.java:3930)
at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
at android.app.Activity.startActivityForResult(Activity.java:3890)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
at android.app.Activity.startActivity(Activity.java:4213)
at android.app.Activity.startActivity(Activity.java:4181)
at com.example.andrzejzuzak.visiondummyapp.MainActivity.onActivityResult(MainActivity.kt:85)
at android.app.Activity.dispatchActivityResult(Activity.java:6456)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
at android.app.ActivityThread.-wrap16(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
让我困扰的是这一行:
Unable to find explicit activity class {com.example.andrzejzuzak.visiondummyapp/com.example.andrzejzuzak.visiondummyapp.DummyActivity$Companion
这是否真的意味着我必须在某处注册 Companion 对象?
DummyActivity.javaClass
指的是 DummyActivity.Companion
而不是 DummyActivity
。事实上,它甚至是一个警告:
The resulting type of this javaClass
call is
Class<Dummy.Companion>
and not Class<Dummy>
. Please use more clear
::class.java
syntax to avoid confusion.
相反,您应该使用 DummyActivity::class.java
、
我有一个Activity
class DummyActivity : Activity() {
companion object {
@JvmStatic fun onNewIntent(context: Context): Intent {
val intent = Intent(context, DummyActivity.javaClass)
return intent
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
在Manifest中声明如下:
<activity android:name=".DummyActivity"/>
</application>
当我尝试启动它时,我得到:
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class > {com.example.andrzejzuzak.visiondummyapp/com.example.andrzejzuzak.visiondummyapp.DummyActivity$Companion}; have you declared this activity in your AndroidManifest.xml? at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512) at android.app.Activity.startActivityForResult(Activity.java:3930) at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79) at android.app.Activity.startActivityForResult(Activity.java:3890) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859) at android.app.Activity.startActivity(Activity.java:4213) at android.app.Activity.startActivity(Activity.java:4181) at com.example.andrzejzuzak.visiondummyapp.MainActivity.onActivityResult(MainActivity.kt:85) at android.app.Activity.dispatchActivityResult(Activity.java:6456) at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method)
让我困扰的是这一行:
Unable to find explicit activity class {com.example.andrzejzuzak.visiondummyapp/com.example.andrzejzuzak.visiondummyapp.DummyActivity$Companion
这是否真的意味着我必须在某处注册 Companion 对象?
DummyActivity.javaClass
指的是 DummyActivity.Companion
而不是 DummyActivity
。事实上,它甚至是一个警告:
The resulting type of this
javaClass
call isClass<Dummy.Companion>
and notClass<Dummy>
. Please use more clear::class.java
syntax to avoid confusion.
相反,您应该使用 DummyActivity::class.java
、