首页 文章

Android活动导航流程问题

提问于
浏览
0

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

A - > B - > A.

我想实现以下行为:

用户在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 [] ,new Object [] ); } @Override 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;
}`

4 回答

  • 0
    after that press my back button
    

    finish() activity B 这里..

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

  • 2

    如果您不想导航回Activity,可以尝试将 finish(); 放在 startActivity(); 之后

  • 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

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

    Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
    

相关问题