我正在尝试做类似文件管理器的事情。在行动栏我想做“谷歌驱动”应用程序中的文件夹导航。我需要创建方法,可以从最后的数字或类似的东西前往活动。
例:
所以,如果我有堆栈:[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);
}
}
假设Activity2
是你想去的第二个活动,
试试这个:
Intent intent = new Intent(this,Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
根据Android Documentation关于FLAG_ACTIVITY_CLEAR_TOP
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在开启) top)旧活动作为新的意图。
这取决于需要,但如果我们只想在回流中跳过活动,那么有用的可以是在Manifest中从历史中删除此活动。
[1] - > [2] - > [3] - 正常流量
[1] < - [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);
而且非常重要 - 在FirstAop中,在singleTop上显示设置启动模式。
<activity
android:name=".FirstActivity"
android:launchMode="singleTop" />
如果没有launchMode,将重新创建属性活动。
用这个
Intent intent = new Intent(this,Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);