2017-04-01 5 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 $ Companion};あなたのAndroidManifest.xmlでこのアクティビティを宣言しましたか? android.app.Activity.startActivityForResultでandroid.app.Instrumentation.execStartActivity(Instrumentation.java:1512) でandroid.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794) (Activity.java:3930) でで(アクティビティ)。アクティビティjava:3890)android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859) android.app.Activity.startActivity(Activity.java:4213) android.app.Activity.startActivity(Activity.java:4181) at com.example.andrzejzuzak.visiondummyapp.MainActivity.onActivityResult(MainActivity.kt:85) android.app.ActivityThread.deliverResults android.app.ActivityThread.handleSendResult(ActivityThread.java:3742で(ActivityThread.java:3695) )でandroid.app.Activity.dispatchActivityResult(Activity.java:6456) で) android.app.ActivityThread.-wrap16(ActivityThread.java) android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1393) android.os.Handler.dispatchMessage(Handler.java:102) とandroid.os.Looper.loop(Looper.java:148) とandroid.app.ActivityThread.main(ActivityThread.java:5417) でのjava私を気に何.lang.reflect.Method.invoke(ネイティブメソッド)

はこの行です:明示的なアクティビティクラス{com.example.andrzejzuzak.visiondummyapp/com.exampleを見つけることができません

。 andrzejzuzak.visiondummyapp.DummyActivity $ Companion

コンパニオンオブジェクトをどこかに登録する必要があるのは実際ですか?

+1

を使用する必要があります(コンテキストを、DummyActivity :: class.java)'代わり –

+0

無関係:活動はすでに 'onNewIntent'方法があり、おそらく、ファクトリメソッドの名前を 'createIntent'のように一見わかりやすくわかりやすい名前に変更したいと思うかもしれません。 (コールバックではなく、 'on'で始まらない。)あなたの将来の自己をある時間保存してください。 –

答えて

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

関連する問題