【发布时间】:2011-11-06 18:28:15
【问题描述】:
我有启动活动 B(singleInstance) 的活动 A。在活动 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:
` @覆盖
public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState);
callWebViewMethod("saveState", new Class[] { Bundle.class },
新对象[] { savedInstanceState });
}
@覆盖
公共无效 onRestoreInstanceState(捆绑保存的实例状态){
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;
}`
【问题讨论】:
标签: android