如何从第三次活动回到第一次活动?

时间:2012-07-24 08:20:35

标签: android

我有三项活动A,B& C.现在我有这个表格A,B和C,在默认的android“标准”模式中活动导航发生像这样A-> B-> C-> B-> A.现在我是什么想要在这里,当我从B进入活动C时,当我回到活动时,我去了前一个活动,即B但我想从C.回到A.如何实现这个可以有人告诉这个?

,我想通过意图标志或者如果可能的话想要为活动应用启动模式,但是我很困惑应该使用哪种启动模式来实现这一目标? - 任何人都可以帮助我吗

提前致谢

8 个答案:

答案 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可以添加到堆栈中,也可以不添加。你可以自己决定。 在这种情况下,流程将如下:

  • MainActivity将Fragment A添加到容器中。
  • 按下按钮
  • 片段A被片段B替换。片段A被添加到
    具有.addToBackStack(..)
  • 的堆栈
  • 显示片段B
  • 按下按钮
  • 片段B被片段C替换。片段B未被添加到堆栈中。
  • 显示片段C
  • 按下后退
  • 显示片段A

<强>更新

您可以先阅读提供的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();