在我的应用程序中它具有可以进一步低于结构的功能 这样我将使用不同的数据一次又一次地打开相同的活动
示例:
MainActivity -> activity1 (1) -> activity1 (2) -> activity1 (3)
我已将此结构存储在数组中
因此,如果我通过将意图标记设置为activity1(1)
导航回FLAG_ACTIVITY_CLEAR_TOP
,则它不会从后堆栈中清除activity1
(2),activity1
(3)仍然出现在按钮背面按下)
答案 0 :(得分:0)
您可以尝试添加两个标记
Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TASK
答案 1 :(得分:0)
<强> 1。方法1
如果我们要遵循您的方法,您可以通过这种方式使用@ shuvro的答案来实现您的目标:
public class MainActivity extends AppCompatActivity {
private List<Intent> intents = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intents.add(intent);
startActivity(intent);
}
});
}
@Override
public void onBackPressed() {
if (!intents.isEmpty()) {
Intent intent = intents.get(0);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
}
在 AndroidManifest.xml 中,您应该在您的活动中添加此属性:
android:launchMode="singleInstance"
<强> 2。方法2
我认为这种方法更清洁。 您可以为每个屏幕创建一个活动,以扩展具有公共代码的BaseActivity。因此,当您打开Activity1(它是根,应该作为 singleInstance 启动)和Activity2时,您将打开它们而不带任何标志。但是当你必须打开Activity3时,你应该添加标志。
来自MainActivity 打开Activity1:
Intent intent = new Intent(MainActivity.this, Activity1.class);
startActivity(intent);
来自Activity1 打开Activity2:
Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent);
来自Activity2 打开Activity3:
Intent intent = new Intent(Activity2.this, Activity3.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);