在Android中的导航堆栈顶部启动活动

时间:2012-05-23 15:23:06

标签: android android-intent android-activity

我正在实施TabActivity的解决方案,其活动位于TabHost,如http://ericharlow.blogspot.com/2010/09/experience-multiple-android-activities.html所述。我意识到这是次优的,但我已经走了这条路很远,只有一个剩余的打嗝。我需要弹出我正在管理的堆栈顶部(使用活动ID的String列表)并且我知道我可以使用以下方式获取此活动:

Activity current = getLocalActivityManager().getActivity(mIdList.get(0));

但是,我不知道“显示”current的方法。

我知道我可以这样做:

Activity current = getLocalActivityManager().getActivity(mIdList.get(1))
current.finish();

如果堆栈上至少有两个活动,这将产生预期的结果。但是,当只有一个时,它会因ArrayOutOfBoundsException而失败。

如何“显示”特定活动?

1 个答案:

答案 0 :(得分:1)

尝试这种方式来启动活动堆栈中始终位于顶部的活动:

List<ActivityManager.RunningTaskInfo> processes1 = activityManager.getRunningTasks(1);
ComponentName componentInfo = processes1.get(0).topActivity;
String classname =processes1.get(0).topActivity.getClassName(); 
String packagename = processes1.get(0).topActivity.getPackageName();
if(classname.equalsIgnoreCase("com.YOUR_PACKAGE_NAME..YOURACTIVITY_NAME"))
    {
        Intent intent24 = new Intent(Intent.ACTION_MAIN).addCategory(
        Intent.CATEGORY_LAUNCHER).setClassName("YOUR_PACKAGE_NAME",
        "com.YOUR_PACKAGE_NAME..YOURACTIVITY_NAME").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        .addFlags(Intent.FLAG_FROM_BACKGROUND).setComponent(new ComponentName("YOUR_PACKAGE_NAME",
        "com.YOUR_PACKAGE_NAME..YOURACTIVITY_NAME"));
        getApplicationContext().startActivity(intent24);
    }
    else
    {
     //DONE SOMETHING HERE...
    }