我有三项活动A,B& C.现在我有这个表格A,B和C,在默认的android“标准”模式中活动导航发生像这样A-> B-> C-> B-> A.现在我是什么想要在这里,当我从B进入活动C时,当我回到活动时,我去了前一个活动,即B但我想从C.回到A.如何实现这个可以有人告诉这个?
,我想通过意图标志或者如果可能的话想要为活动应用启动模式,但是我很困惑应该使用哪种启动模式来实现这一目标? - 任何人都可以帮助我吗
提前致谢
答案 0 :(得分:11)
只需启动新意图并清除堆栈中的活动。
Intent intent = new Intent(this, A.class);
intent.addFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent);
答案 1 :(得分:1)
启动Activity C时使用finish()
方法。
即。
Intent i = new Intent(ActivityB.this, ActivityC.class);
startActivity(i);
finish();
答案 2 :(得分:1)
启动活动C时,您可以finish()
活动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);
}
答案 3 :(得分:1)
另一种方法:
使用Fragments
。片段被添加到容器中,并在您喜欢时被其他片段替换。替换的Fragment可以添加到堆栈中,也可以不添加。你可以自己决定。
在这种情况下,流程将如下:
.addToBackStack(..)
<强>更新强>
您可以先阅读提供的documention Android。
一个简单的例子,帮助您入门并解释基础知识。我正在使用Android支持库v4 for fragment来支持比HoneyComb更旧的版本:
main_activiy - XML
<LinearLayout>
<FrameLayout id:content_container/>
<LinearLayout>
<强> MainActivity 强>
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();
}
}
片段A (模拟你可以创建片段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();
}
}
答案 4 :(得分:0)
您可以覆盖活动中的onBackPressed方法以启动A活动,而不是回溯历史记录树。
答案 5 :(得分:0)
你应该调用finish();在移动到
时的B活动中答案 6 :(得分:0)
我有更好的解决方案,不会要求: 1-在操作C中覆盖onBackPressed() 2-从C调用startActivity(A),因此无需创建额外的意图。 3-无需在活动B中调用finish()。
只需要在活动A中添加意图标志,你可以在这里添加B,如下所示:
Intent intent = new Intent(A.this, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);// Only need this line in A.java
startActivity(intent);
答案 7 :(得分:0)
如果您想从 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();