2017-04-01 79 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