12

我正在尝试实现一个按钮,该按钮将导致我的应用程序返回到第一个活动并表现得好像它(几乎)重新启动一样。这段代码

Intent newIntent =
        new Intent(currentActivity.getApplicationContext(), StartActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_CLEAR_TASK);
currentActivity.startActivity(newIntent);

对于运行 Android 4.1 的较新平板电脑似乎可以正常工作,但它不适用于运行 Android 2.3.4 的旧设备。

我发现了一些关于此的线程:

Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK 无法正常工作 Android

清除任务中的所有活动?

阅读细则让我相信我应该使用 android-support-v4.jar 中的 IntentCompat 类,http://developer.android.com/reference/android/support/v4/content/IntentCompat.html

不幸的是,文档不包含任何示例,我非常不确定应该如何使用 IntentCompat。我发现的唯一例子是:Not start MainActivity with android 2.3

这让我相信我应该做这样的事情:

    Intent newIntent = IntentCompat.makeRestartActivityTask(cn);

但这给了我一个编译器错误,说“makeRestartActivityTask”是一个未定义的符号。

我猜这意味着我没有将 android-support-v4.jar 正确添加到我的构建环境(IntelliJ IDEA 12 社区版)中,但是我尝试了几种不同的方式,但它仍然不起作用.

所以我有两个问题:

  1. 我尝试使用 IntentCompat 是否正确?

  2. 如何让编译器停止说“makeRestartActivityTask”是一个未定义的符号?

4

3 回答 3

26

更新

IntentCompat.makeRestartActivityTask()Google 已在当前支持库版本中删除了该方法。相反,您可以只使用普通的 Android API:

ComponentName cn = intent.getComponent();
Intent.makeRestartActivityTask(cn);

我希望这可以节省人们寻找替代品的时间;)

于 2018-01-21T22:19:37.860 回答
21

这就是我使用 IntentCompat 的方式

    Intent intentToBeNewRoot = new Intent(this, MainActivity.class);
    ComponentName cn = intentToBeNewRoot.getComponent();

    Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);

    startActivity(mainIntent);

这有效地用 MainActivity 替换了我不再需要的任务根。它适用于 Gingerbeard 和 ICS。我还没有看到“是一个未定义的符号”消息。

于 2013-10-11T09:28:18.493 回答
1

IntentCompat 已弃用,可能会被删除,但 Intent 类此静态方法

意图 mainIntent = Intent.makeRestartActivityTask(cn);

所以只需使用上面的语句。

于 2018-11-14T05:49:05.643 回答