5

我有三个活动A,B和C。现在任务我有这个表格A,B和C,在默认的android“标准”模式下活动导航发生这样的A->B->C->B->A .现在我想要的是当我从 B 进入活动 C 时,当我在活动中返回时,我去了以前的活动,即 B 但我想从 C 回到 A。如何实现这一点有人能告诉我吗? ?

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

提前致谢

4

8 回答 8

11

只需启动一个新意图并清除堆栈中的活动。

 Intent intent = new Intent(this, A.class);
 intent.addFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 startActivity(intent);
于 2012-07-24T08:24:01.097 回答
1

finish()启动Activity C时使用方法。即

Intent i = new Intent(ActivityB.this, ActivityC.class);
startActivity(i);
finish();
于 2012-07-24T08:23:12.720 回答
1

您可以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);
    }
于 2012-07-24T08:26:18.930 回答
1

另一种方法:

使用Fragments. 片段被添加到容器中,并在你喜欢的时候被其他人替换。被替换的 Fragment 可以添加到堆栈中,也可以不添加。你可以自己决定。在这种情况下,流程如下:

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

更新

您可以从阅读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();
        }
    }
于 2012-07-24T09:32:40.403 回答
0

您可以覆盖活动中的 onBackPressed 方法来启动 A 活动,而不是回溯历史树。

于 2012-07-24T08:23:11.567 回答
0

你应该调用finish(); 在 B 活动中,当您移动到

于 2012-07-24T08:25:34.583 回答
0

我有更好的解决方案,不需要: 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);
于 2015-06-29T12:28:15.480 回答
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();
于 2021-02-04T12:39:36.270 回答