Android活动导航流程问题

时间:2011-08-30 12:24:34

标签: android

我有活动A开始活动B(singleInstance)。在活动B中有一个后退按钮,它开始意图活动A.

A - > B - >甲

我想实现以下行为:

用户在A上触发B,然后按下我的后退按钮,返回活动A并按设备的硬件后退按钮,导航到设备的主屏幕。

现在看起来像这样: 用户在A上触发B,然后按下我的后退按钮,返回活动A并按设备的硬件后退按钮,再次导航到活动A,然后再次按下后退按钮并打开活动B.然后按下后退按钮和活动A发生,这是一个无限循环......

我不能使用标志NO_HISTORY,因为我想从其他一些原因保存活动B的状态。 Activity B是一个webBrowser,所以我重载了onSaveInstanceState和onRestoreInstanceState方法,以保存在已加载的缓存网站中。

现在我通过启动意图到主屏幕来重载活动A中的onBackPressed方法,但这不是一个好的解决方案。

你还有其他想法吗?

以下是代码:

活动A: Intent browser = new Intent(this, B.class); this.startActivity(browser);

活动B: `@Override     public void onSaveInstanceState(Bundle savedInstanceState){super.onSaveInstanceState(savedInstanceState);

            callWebViewMethod(“saveState”,new Class [] {Bundle.class},                     new Object [] {savedInstanceState});     }     @覆盖     public void onRestoreInstanceState(Bundle savedInstanceState){         super.onRestoreInstanceState(savedInstanceState);

    callWebViewMethod("restoreState", new Class[] { Bundle.class }, 
            new Object[] { savedInstanceState });
}   
@Override
public void onBackPressed() {
    if (webView != null) {
        if ( ( Boolean )callWebViewMethod( "canGoBack" ) )
        {
            callWebViewMethod("goBack");
        }
        else
        {
            startActivity( getBackIntent() );
        }
    }
}
private Intent getBackIntent() {
    Intent i = new Intent();
    // some code here           
    i.setClass(this, A.class);
    return i;
}`

5 个答案:

答案 0 :(得分:3)

after that press my back button

finish() activity B此处..

从您的活动A中删除onBackPressed方法。

答案 1 :(得分:2)

如果您不想导航回“活动”,可以尝试将finish();放在startActivity();

之后

答案 2 :(得分:2)

在您的代码中:

@Override
    public void onBackPressed() {
    if (webView != null) {
        if ( ( Boolean )callWebViewMethod( "canGoBack" ) )
        {
            callWebViewMethod("goBack");
        }
        else
        {
            startActivity( getBackIntent() );
        }
    }
}

您无需创建新的Intent即可返回活动A.只需摆脱Else条件。

    @Override
    public void onBackPressed() {
        if (webView != null) {
            if ( ( Boolean )callWebViewMethod( "canGoBack" ) )
            {
                callWebViewMethod("goBack");
            }
        }
        else {
            super.onBackPressed(); // pass to the default handler
        }
    }

答案 3 :(得分:0)

不要覆盖onBackPressed,不要调用完成。 启动每个活动时,将意图标志设置为

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

答案 4 :(得分:0)

从A> B A跳到B时会创建新的意图

Intent intent = new Intent(A.this,B.class);
startActivity(intent);

当您从活动B中按回去时,只需调用onBackPressed方法

onBackPressed();

当您退回到活动A并且您想从A跳转到HomeActivity时,请覆盖onBackPressed()方法。

@Override
    public void onBackPressed() {
       Intent intent = new Intent(A.this,HomeActivity.class);
       startActivity(intent);
    }

如果您是从B跳到家并且他们按回去,它将跳回到上一个打开的活动,因为android会维护您的活动堆栈。如果您不希望活动堆栈中有该活动,请确保完成活动,否则可以使用此代码清除整个堆栈。

 Intent intent = new Intent(B.this, HomeActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);

这将创建新的Activity,并且它们不会是任何堆栈。