18

我正在尝试做类似文件管理器的事情。在操作栏中,我想像在“google drive”应用程序中一样进行文件夹导航。我需要创建方法,该方法可以从末尾按数字转到以前的活动,或者类似的东西。

例子:

所以如果我有堆栈: [1] -> [2] -> [3] -> [4] -> [5]

我需要转到第二个:所以我需要从堆栈中删除 [3]、[4] 和 [5] 并转到 [2]。

所有活动都是一个类 ContentActivity.java。

怎么可能呢?

更新:

我如何开始活动的一些代码:

public class ContentActivity extends Activity implements AdapterView.OnItemClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        Intent intent = getIntent();
        String folderToOpen = intent.getStringExtra("folderName");
        fillList(folderToOpen);
    }


    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        ...
        Intent intent = new Intent(ContentList.this, ContentList.class);
        intent.putExtra("folderName", item.getName());
        startActivity(intent);
    }
}
4

4 回答 4

33

假设这Activity2是您要参加的第二项活动,

尝试这个:

Intent intent = new Intent(this,Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

根据Android文档关于FLAG_ACTIVITY_CLEAR_TOP

如果设置,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是关闭它上面的所有其他活动,并且此 Intent 将被传递到(现在顶部)作为新意图的旧活动。

于 2014-05-23T10:13:58.797 回答
12

按清单属性跳过活动

这取决于需要,但如果我们只是想跳过回流中的活动,那么可以从清单中的历史记录中删除此活动。

[1] -> [2] -> [3] - 正常流量

[1] <- [3] - 回流

那么对于[2] Activity 我们可以在 Manifest 中设置noHistory属性:

<activity
android:name=".SecondActivity"
android:noHistory="true" />

感谢这种方法,我们的 [2] Activity 将永远不会在回流中启动。


使用意图标志

从历史堆栈中删除活动并不总是一个好主意,例如,如果我们的活动有时需要回流,有时不需要,那么为了启动想要的活动,我们需要在意图中设置标志:

Intent intent = new Intent(this, FirstActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

并且非常重要- 在SingleTop 上的 FirstActivity清单设置启动模式。

<activity
   android:name=".FirstActivity"
   android:launchMode="singleTop" />

没有 launchMode 属性的活动将被重新创建。

于 2017-01-28T13:24:48.653 回答
0

对于科特林

        val intent = Intent(this, yourDestinationActivity::class.java)
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        startActivity(intent)
于 2019-07-21T17:31:20.850 回答
0

用这个

Intent intent = new Intent(this,Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2019-04-25T05:11:40.997 回答