当前位置: 首页 > 知识库问答 >
问题:

如何从另一个模块开始活动

谢承颜
2023-03-14

我有两个模块。应用程序和模块测试。模块应用程序包含带按钮的主活动。模块测试包含主要活动二。我想通过点击按钮从模块应用程序运行Test/MainActivity。但Android仍然无法从模块测试中看到主要活动。见下文。

模块应用清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.main">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name="com.example.test.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

模块测试清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

在模块app MainActivity中为单击按钮和运行第二个活动编码:

 public void runActivity(View view) {

    Intent intent = null;
    try {
        intent = new Intent(this, Class.forName("com.example.test.MainActivity"));
        startActivity(intent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

在控制台我得到一个错误:

带系统。错误:java。lang.ClassNotFoundException:com。实例测验主要活动

编辑:应用内构建。gradle文件我有:

implementation project(path:':test', configuration:'default')

编辑2:这里是一个完整的例子,不工作的链接。

共有3个答案

曹焱
2023-03-14

最后,我在这里找到了解决方案:无法解决依赖关系。。。

现在,Android Studio可以看到带有MainActivity的模块,我可以运行它。

公冶嘉茂
2023-03-14

您可以使用与访问当前模块活动相同的方式访问另一个模块中的活动。因此,这应该有效:

public void runActivity(View view) {
  Intent intent = new Intent(this, com.example.test.MainActivity.class);
  startActivity(intent);
}

但你们不应该这样做,因为你们使你们的应用程序模块和测试模块紧密耦合。相反,您需要在测试模块内创建一个导航器类。导航器应该是从外部模块访问活动的唯一方式。Navigator类是一个单例类。

您可以使用以下内容在测试模块内创建Navigator类:

public class Navigator {
    private Navigator(){}

    public static Navigator getInstance() {
        return NavigatorHolder.INSTANCE;
    }

    private static class NavigatorHolder {
      private static final Navigator INSTANCE = new Navigator();
    }

    public void navigateToMainTest(Context context) {
      Intent intent = new Intent(context, MainActivity.class);
      context.startActivity(intent);
    }
}

然后,您可以使用以下工具启动测试模块的MainActivity:

Navigator.getInstance().navigateToMainTest(yourAppActivity.this);

通过使用Navigator,您可以封装测试模块内部的内容。您可以更改navigateToMainTest以启动AlertDialog而不是Activity,而不会影响应用程序模块。

从开济
2023-03-14

您有多种实现方法:

1-如果模块测试是模块应用程序的依赖项,则通常可以从模块应用程序访问测试/活动类。

2-您可以使用意向过滤器隐式启动测试/活动

3-如果模块测试有广播接收器,您可以向其发送广播(显式或隐式)并从那里打开活动

 类似资料:
  • 问题内容: 假设我有一个名为的软件包,其中包含: 和: 然后我执行以下脚本: 这是我的期望: 这是我得到的: 谁能解释我的误解? 问题答案: 您正在使用。在导入模块的全局范围(或​​发生import语句的任何范围)中成为符号。 当您为指定新值时,您也只是在更改哪些值点,而不是实际值。尝试直接使用in导入,并通过设置在那里进行实验。这样,您实际上将在此上下文中修改哪个是“实际”值。 它有点令人费解,

  • 问题内容: 在我的angularJS应用程序中,我有两个模块:模块A和模块B。 如何在模块B中调用该函数? 问题答案: 您需要在 模块A中 定义一个工厂: 然后使用 模块B中* 的工厂: *

  • 我已经想从我的Main活动启动我的RecipientFra法规,并从我的Main活动将数据传递到Fra法规。这是我实现的代码。但是碎片没有开始。 我还想知道如何传递intent.set数据,并在碎片中获取数据。目前我有以下代码: 受体片段 主要活动

  • 问题内容: 从Activity中包含的RecyclerView的适配器中,我试图在按下RecyclerView的元素时启动一个片段,这是我现在的代码: 我测试了它是否启动了我创建的一些“测试活动”,所以我知道除了片段启动之外的所有功能都可以正常工作。 错误在这里: 我正在启动作为活动的Fragment,所以当我运行应用程序时,它崩溃了,并告诉我在清单中将MainFragment声明为活动。 如何从

  • 我在活动2中有一个字符串 我想在activity1的文本字段中插入此字符串。我该怎么做?

  • null 我是否需要创建模块y的库,然后将创建的库导入模块X? 或者解决办法是别的。