我有活动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;
}`
答案 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,并且它们不会是任何堆栈。