あかんわ

覚えたことをブログに書くようにすれば多少はやる気が出るかと思ったんです

Androidのエラーでandroid.content.ActivityNotFoundExceptionに遭遇した際の確認箇所

AndroidアプリのIntentを使った画面遷移で、android.content.ActivityNotFoundExceptionに何度か遭遇し、解決方法に辿り着くまでに時間を要する場合があったため書き留めておきます。

android.content.ActivityNotFoundException: Unable to find explicit activity class have you declared this activity in your AndroidManifest.xml?

目次

AndroidManifest.xmlの記述を確認する

エラーメッセージの最後の方に記述されているように、AndroidManifest.xml<activity>要素に、作成したActivityを追加し忘れていると遭遇するようです。

have you declared this activity in your AndroidManifest.xml?

AndroidManifest.xmlへの記述忘れが原因の場合*1は、<application>要素の中に表示したいActivity*2<activity>要素を記述すると解決しました。

<?xml version="1.0" encoding="utf-8"?>
            ・
            ・
            ・
    <application



        <activity android:name=".MainActivity">
            ・
            ・
            ・
        </activity>

        <activity android:name=".SubActivity">
        </activity>

    </application>

</manifest>

パッケージ名を確認する

何かの拍子にパッケージ名を中途半端に変更してしまい、プロジェクトで定義されている名前空間に齟齬が生じると遭遇*3するようです。

package com.example.sampleapp

パッケージ名の誤りが原因の場合は、アプリケーション名やプロジェクトディレクトリの名前がSampleAppで、パッケージ名もcom.example.sampleappが正しいにもかかわらず、パッケージ名やソースコードが格納されているディレクトリの名前がcom.example.sampleのように間違っている部分を修正すると解決しました。

Listenerのimportを確認する

ListViewGridView等のViewGroupで利用するAdapterView.OnItemClickListenerを、import android.widget.AdapterView.OnItemClickListenerのように詳細にimportしてnew OnItemClickListener()で使おうとすると遭遇する場合がある*4ようです。

new AdapterView.OnItemClickListener()

パッケージのimportimport android.widget.AdapterViewに変更して、Listenernew AdapterView.OnItemClickListener()で使うと解決しました。

参考記事

android.tecc0.com goo.gl stackoverflow.com

開発環境

*1:この場合は少し検索しただけで解決方法に辿り着きました

*2:ここでは作成したActivityの名前がSubActivityの場合を記述しています

*3:この原因に辿り着くまでにだいぶ悩みました

*4:なんらかの理由で読込みに失敗していると思われます