2017-04-01 73 views
5

伴侣的对象 - 没有Android的希望其注册为活动

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) 
    } 
} 

它在清单中声明如下活动:

<activity android:name=".DummyActivity"/> 
</application> 

当我尝试启动它(?) ,我得到:

引起:android.content.ActivityNotFoundException:无法找到显式活动类> {com.example.andrzejzuzak.visiondummyapp/com.e xample.andrzejzuzak.visiondummyapp.DummyActivity $伴侣};你有没有在你的AndroidManifest.xml中声明这个活动? 在android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794) 在android.app.Instrumentation.execStartActivity(Instrumentation.java:1512) 在android.app.Activity.startActivityForResult(Activity.java:3930) 在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 ) 在android.app.Activity.dispatchActivityResult(Activity.java:6456) 在android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 在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(本机方法)

让我困扰的是这行:

无法找到明确的活动类{com.example.andrzejzuzak.visiondummyapp/com。示例。 andrzejzuzak.visiondummyapp.DummyActivity $ Companion

这是否意味着我必须在某处注册Companion对象?

+1

你应该使用'意向(背景下,DummyActivity :: class.java)'代替 –

+0

无关:活动已经有一个'onNewIntent'方法,也许你希望将你的工厂方法重新命名为像createIntent这样简单易懂的东西。 (这不是回调,它不是以'开'开始。)保存你未来的自我一段时间。 –

回答

6

DummyActivity.javaClass指的是DummyActivity.Companion而不是DummyActivity。事实上,它甚至警告:

得到的这个javaClass呼叫类型是 Class<Dummy.Companion>而不是Class<Dummy>。请使用更清晰的 ::class.java语法以避免混淆。

Warning

相反,你应该使用DummyActivity::class.java

+0

在这种情况下@JvmStatic是什么?并感谢您的答案! –

+0

只需复制问题的代码。简而言之,'@ jvmStatic'告诉编译器在JVM平台中使这个方法保持静态。 –

+0

如果正在使用@jvmstatic,为什么它在伴侣对象中,不是上面的代码说'onNewIntent()'是Dummy的内部伴侣的对象的静态方法而不是'Dummy'的静态方法 – Ryan