FLAG_ACTIVITY_CLEAR_TOP出错

时间:2013-04-04 03:58:31

标签: android

我有5项活动

1>> 2>> 3>> 4> 5

数字1活动是首次启动课程。

2号是我的列表数据类

3号和4号是我的输入数据类

5号正在完成课程

在活动编号5中我将代码放入按钮以在完成时返回到上一个

我有两个按钮回到之前的活动。

  1. 返回活动编号2
  2. 返回活动编号1
  3. 这是第5号活动的按钮

    1)。

    Intent intent = new Intent(getApplicationContext(), 2.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                    startActivity(intent);
    

    2)。

    Intent dashboard = new Intent(getApplicationContext(), 1.class);
                    dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(dashboard);
    

    修改

    一个即可。当我在第一个构建应用程序中选择按钮编号 2)。时,我点击并返回到第1个活动。当我点击后退按钮时,活动不再显示第5个活动,它可以正常工作。

    senario a :1>> 2 - ;> 3>> 4> 5>> 1>>退出应用

    B'/ strong>即可。当我在第一个构建应用程序中选择按钮编号 2)。时,我尝试再次输入数据,最后在第5个活动中,我选择按钮编号 1)。我点击并回到2号活动。当我点击后退按钮时,活动不再显示第5个活动,它可以正常工作。

    senario b :1>> 2>> 3>> 4> 5>> 1>> 2>> 3>> 4> 5>> 2>>点击后退按钮>> 1>>点击后退按钮>>退出应用

    C 即可。但是当我在第一个构建应用程序中选择按钮号 1)。时。我点击并返回第2号活动。当我点击后退按钮时,它会再次显示上一个活动或活动编号5.

    senario c :1>> 2>> 3>> 4> 5>> 2>>点击后退按钮>> 5

    d 即可。我希望我的按钮编号 1)。当我点击我的第一个构建应用程序中的后退按钮时没有显示上一个或活动编号5,或者如果没有我选择按钮编号 2,则显示最后一个活动。首先。

    方案 d :1>> 2>> 3>> 4> 5>> 2>>点击后退按钮>> 1>>退出应用

    如何解决这个问题?

    从昨天到现在的问题

    抱歉我的英语不好。

    修改

    在我的清单中我宣布

    1号活动是MainMenu.class。

    <activity
                android:name="hariff.ltis.mainmenu.MainMenu"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    2号是MainPetakTetap.class

    <activity
                android:name="hariff.ltis.petaktetap.MainPetakTetap"
                android:label="@string/title_activity_main_petak_tetap" >
            </activity>
    

    活动编号3,4,5

    <activity
                android:name="hariff.ltis.petaktetap.MainUpdate"
                android:label="@string/title_activity_main_petak_tetap" >
            </activity>
    
    <activity
                android:name="hariff.ltis.petaktetap.UpdateLog"
                android:label="@string/title_activity_main_petak_tetap" >
            </activity>
    
    <activity
                android:name="hariff.ltis.petaktetap.CPetakTempView"
                android:label="@string/title_activity_main_petak_tetap" >
            </activity>
    

2 个答案:

答案 0 :(得分:1)

在我看来,系统杀死活动2因此2不再在堆栈中,因此它现在重新创建并且在5之上。因此,当你按下后,你将得到5.一个解决方法(我我不确定它会起作用)如下:

  1. 从活动3开始活动4,从4开始活动5时,使用startActivityForResult。

  2. 活动4

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);
    
        if (resultCode == RESULT_OK)
        {
             setResult(RESULT_OK);
             finish();
        }
    }  
    
  3. 在活动3中

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);
    
        if (resultCode == RESULT_OK)
        {
             new Intent(getApplicationContext(), 2.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
            startActivity(intent);
             finish();
        }
    } 
    
  4. 在活动5中

    setResult(RESULT_OK);
    finish();
    

答案 1 :(得分:0)

如果您要从任何活动返回上次活动。

请使用finish()而不是创建新的Intent

在您的代码中,您正在创建已存在的活动1.class的新Intent。这是错误的

Intent dashboard = new Intent(getApplicationContext(), 1.class);
                dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(dashboard);

点击按钮

执行此操作

finish(); //这将完成您当前活动的堆栈。

并尝试使用thiscurrent activity name instead of getApplicationContext()`。

更新 如果你想参加任何活动,只需使用StartActivityForResult()