Android错误"无法找到显式活动类"

Joh*_*ket 28 android android-manifest android-activity

我有一个包含几个包的android项目.在这种情况下,包的结构是com.WAPP.SetLocation是包含我想要运行的活动的包.

在我的清单中,com.WAPP被认为是基础包:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.WAPP"
      android:versionCode="1"
      android:versionName="1.0">
Run Code Online (Sandbox Code Playgroud)

我的活动在我的清单中声明为:

<activity android:name=".mainScreenActivity"></activity>
<activity android:name=".SetLocation.setLocationActivity"></activity>
Run Code Online (Sandbox Code Playgroud)

mainScreen活动显示正常,因为它位于com.WAPP包中.但是当我尝试运行setLocationActivity时,我无法找到显式的类错误.这是我如何拥有intent参数:

Intent i = new Intent();
            i.setClassName("com.WAPP.SetLocation",
                           "com.WAPP.SetLocation.setLocationActivity");
            startActivity(i);
Run Code Online (Sandbox Code Playgroud)

Jer*_*rds 26

第一个参数是应用程序包而不是活动所在的包.

您可以像这样调用Activity.

Intent i = new Intent();
i.setClassName("com.WAPP",
               "com.WAPP.SetLocation.setLocationActivity");
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

首选,因为SYLARRR建议让Android自动为您解决问题.因此呼叫为......

startActivity(new Intent(this, setLocationActivity.class));
Run Code Online (Sandbox Code Playgroud)

根据java标准,建议将软件包名称全部设置为低级,并将类名称设置为CamelCased.


Huy*_*ỉnh 13

如果新活动不在与MainActivity相同的数据包中(您从这里调用?),请尝试在清单上声明

<activity android:name="com.WAPP.SetLocation.setLocationActivity"></activity>
Run Code Online (Sandbox Code Playgroud)

并在呼叫者

Intent intent = new Intent(this, setLocationActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


小智 12

除上述答案外,请确保您的活动在清单中的应用程序内声明

<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:supportsRtl="true">

    <activity android:name=".mainScreenActivity"></activity>
    <activity android:name=".SetLocation.setLocationActivity"></activity>

</application>
Run Code Online (Sandbox Code Playgroud)


Ind*_*õue 4

如果我没记错的话,i.setClassName("com.WAPP.SetLocation","com.WAPP.SetLocation.setLocationActivity");应该是i.setClassName(getBaseContext(),"setLocationActivity"); Reference

也尝试一下这个语法:

startActivity(new Intent(MyActivity.this, setLocationActivity.class));
Run Code Online (Sandbox Code Playgroud)

并尝试从以下位置删除起始点:

<activity android:name=".SetLocation.setLocationActivity"></activity>
Run Code Online (Sandbox Code Playgroud)