从堆栈返回特定活动

时间:2014-05-23 10:10:50

标签: android android-activity activity-manager

我正在尝试做类似文件管理器的事情。在行动栏我想做“谷歌驱动”应用程序中的文件夹导航。我需要创建方法,它可以从最后的数字或类似的东西转到上一个活动。

示例:

  

所以,如果我有堆栈:[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 个答案:

答案 0 :(得分:21)

假设Activity2是你想去的第二个活动,

试试这个:

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

根据Android Documentation关于FLAG_ACTIVITY_CLEAR_TOP

  

如果设置,则正在启动的活动已在运行中   当前任务,然后而不是启动它的新实例   活动,其上的所有其他活动将被关闭   这个意图将作为一个传递到(现在在顶部)旧活动   新的意图。

答案 1 :(得分:6)

按清单属性跳过活动

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

  

[1] - &gt; [2] - &gt; [3] - 正常流量

     

[1]&lt; - [3] - 回流

然后对于 [2] 活动我们可以在Manifest中设置 noHistory 属性:

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

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

使用意图标志

从历史堆栈中删除活动并不总是好主意,例如,如果我们的Activity有时需要回流而有时不需要,那么启动想要的活动我们需要在intent中设置标记:

Intent intent = new Intent(this, FirstActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
非常重要 - 在 firstTop 上的 FirstActivity 清单设置启动模式。

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

如果没有launchMode,将重新创建属性活动。

答案 2 :(得分:0)

使用此

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

答案 3 :(得分:0)

对于KOTLIN

        val intent = Intent(this, yourDestinationActivity::class.java)
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        startActivity(intent)