我正在尝试实现一个按钮,该按钮将导致我的应用程序返回到第一个活动,并且就好像它(几乎)全部重新启动一样。这段代码
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 not working Android
Clear all activities in a task?
阅读细则让我相信我应该在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社区版),但我尝试过几种不同的方式,但它仍然没有不行。
所以我有两个问题:
我尝试使用IntentCompat看起来是否正确?
如何让编译器停止说“makeRestartActivityTask”是一个未定义的符号?
答案 0 :(得分:26)
<强>更新强>
Google已删除当前支持库版本中的方法IntentCompat.makeRestartActivityTask()
。相反,您可以使用普通的Android API:
ComponentName cn = intent.getComponent();
Intent.makeRestartActivityTask(cn);
我希望这可以节省一些时间寻找替代品;)
答案 1 :(得分:21)
这就是我使用IntentCompat
的方式 Intent intentToBeNewRoot = new Intent(this, MainActivity.class);
ComponentName cn = intentToBeNewRoot.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
这有效地用MainActivity替换了我不再需要的任务根。它适用于Gingerbeard和ICS。我还没有看到“是一个未定义的符号”的消息。
答案 2 :(得分:1)
不建议使用IntentCompat,可以将其删除,但是Intent类是此静态方法
Intent mainIntent = Intent.makeRestartActivityTask(cn);
所以只需使用上面的语句即可。