从堆栈返回特定活动

fac*_*ool 13 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

ant*_*iom 26

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

试试这个:

Intent intent = new Intent(this,Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

根据Android文档有关FLAG_ACTIVITY_CLEAR_TOP

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在开启) top)旧活动作为新的意图.

  • 你忘了提到你需要设置`FLAG_ACTIVITY_SINGLE_TOP`,以便在它宣布其启动模式为"多个"(默认)或设置`android:launchMode ="singleTop"时不重新创建Activity.在你的清单中 (4认同)

Mac*_*ora 8

通过清单跳过活动属性

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

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

[1] < - [3] - 回流

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

<activity
android:name=".SecondActivity"
android:noHistory="true" />
Run Code Online (Sandbox Code Playgroud)

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


使用Intent Flag

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

Intent intent = new Intent(this, FirstActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

而且很重要的 -在FirstActivity在清单中设置启动模式singleTop.

<activity
   android:name=".FirstActivity"
   android:launchMode="singleTop" />
Run Code Online (Sandbox Code Playgroud)

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