我正在尝试做类似文件管理器的事情。在行动栏我想做“谷歌驱动”应用程序中的文件夹导航。我需要创建方法,它可以从最后的数字或类似的东西转到上一个活动。
示例:
所以,如果我有堆栈:[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);
}
}
答案 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)
val intent = Intent(this, yourDestinationActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)