我有三个活动A,B和C。现在任务我有这个表格A,B和C,在默认的android“标准”模式下活动导航发生这样的A->B->C->B->A .现在我想要的是当我从 B 进入活动 C 时,当我在活动中返回时,我去了以前的活动,即 B 但我想从 C 回到 A。如何实现这一点有人能告诉我吗? ?
,我想通过意图标志来做,或者如果可能的话想为活动应用启动模式,但我很困惑我应该使用哪种启动模式来实现这一点?-有人可以帮我吗
提前致谢
我有三个活动A,B和C。现在任务我有这个表格A,B和C,在默认的android“标准”模式下活动导航发生这样的A->B->C->B->A .现在我想要的是当我从 B 进入活动 C 时,当我在活动中返回时,我去了以前的活动,即 B 但我想从 C 回到 A。如何实现这一点有人能告诉我吗? ?
,我想通过意图标志来做,或者如果可能的话想为活动应用启动模式,但我很困惑我应该使用哪种启动模式来实现这一点?-有人可以帮我吗
提前致谢
只需启动一个新意图并清除堆栈中的活动。
Intent intent = new Intent(this, A.class);
intent.addFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent);
finish()
启动Activity C时使用方法。即
Intent i = new Intent(ActivityB.this, ActivityC.class);
startActivity(i);
finish();
您可以finish()
在启动 Activity C 时使用 Activity B。所以您的堆栈将只是 A->C。在启动 Activity C 之前使用ActivityB.finish()
方法。其他方法可能是覆盖按下的后退按钮键。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//do your process here
}
return super.onKeyDown(keyCode, event);
}
另一种方法:
使用Fragments
. 片段被添加到容器中,并在你喜欢的时候被其他人替换。被替换的 Fragment 可以添加到堆栈中,也可以不添加。你可以自己决定。在这种情况下,流程如下:
.addToBackStack(..)
更新
您可以从阅读Android 提供的文档开始。
一个简单的例子,让你开始并解释基础知识。我正在使用 Android 支持库 v4 来支持比 HoneyComb 更旧的版本:
main_activiy - XML
<LinearLayout>
<FrameLayout id:content_container/>
<LinearLayout>
主要活动
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activiy );
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.content_container, new FragmentA());
transaction.commit();
}
}
Fragment A(类似你可以创建 Fragment B 和 C)
public class Fragment A extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentA, container, false);
return view;
}
}
您可以在您的内部实现逻辑Fragment
并捕获例如点击事件。这是您可以从 OnClickListener 在片段之间切换的方式:
private class mClickListener implements OnClickListener {
public void onClick(View v) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.content_container, new FragmentB);
transaction.addToBackStack(...); // Remove this when you don't want it to be stacked
transaction.commit();
}
}
您可以覆盖活动中的 onBackPressed 方法来启动 A 活动,而不是回溯历史树。
你应该调用finish(); 在 B 活动中,当您移动到
我有更好的解决方案,不需要: 1-在 Activity C 中覆盖 onBackPressed() 2-从 C 调用 startActivity(A),因此无需创建额外的意图。3-无需在活动 B 中调用 finish()。
只需在您开始 B 的活动 A 中添加意图标志,如下所示:
Intent intent = new Intent(A.this, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);// Only need this line in A.java
startActivity(intent);
如果您想从C返回A Activity 类而不重新加载第一个 Activity 类,请尝试以下代码
这也将从 backstack 中删除中间活动。
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();