我有活动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 回答
finish() activity B
这里..从您的活动A中删除
onBackPressed
方法如果您不想导航回Activity,可以尝试将
finish();
放在startActivity();
之后在你的代码中:
您无需创建新的Intent即可返回活动A.只需摆脱Else条件即可 .
不要覆盖onBackPressed,不要调用完成 . 启动每个活动时,将intent标志设置为