【发布时间】:2017-08-24 10:12:31
【问题描述】:
我有九项活动。例如,活动“A”是主要活动。用户从 NavigationDrawer 打开活动“B”、“С”、“D”并在“D”中单击“返回”按钮。在这种情况下,需要返回到 Activity “A”,而不是通过整个最近打开的 Activity 堆栈。
这段代码可以满足我的需要:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Handler mHandler = new Handler();
drawerLayout.closeDrawers();
switch (item.getItemId()) {
case R.id.A:
if (item.isChecked()) {
break;
} else {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(activity, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(intent);
}
}, 250);
}
break;
case R.id.B:
if (item.isChecked()) {
break;
} else {
if (activity instanceof A) {
userFlavorsMap.clear();
if (flavorContainer.getChildCount() > 0){
flavorContainer.removeAllViews();
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(activity, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(intent);
}
}, 250);
}
break;
case R.id.C:
if (item.isChecked()) {
break;
} else {
if (activity instanceof A) {
userFlavorsMap.clear();
if (flavorContainer.getChildCount() > 0){
flavorContainer.removeAllViews();
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(activity, C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(intent);
}
}, 250);
}
break;
case R.id.D:
if (item.isChecked()) {
break;
} else {
if (activity instanceof A) {
userFlavorsMap.clear();
if (flavorContainer.getChildCount() > 0){
flavorContainer.removeAllViews();
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(activity, D.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(intent);
}
}, 250);
}
break;
case R.id.E:
if (item.isChecked()) {
break;
} else {
if (activity instanceof A) {
userFlavorsMap.clear();
if (flavorContainer.getChildCount() > 0){
flavorContainer.removeAllViews();
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(activity, E.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(intent);
}
}, 250);
}
break;
case R.id.F:
File usersCounter = new File("data/data/com.com.com/shared_prefs/file.xml");
if (usersCounter.exists()) {
if (item.isChecked()) {
break;
} else {
if (activity instanceof A) {
userFlavorsMap.clear();
if (flavorContainer.getChildCount() > 0){
flavorContainer.removeAllViews();
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(activity, F.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(intent);
}
}, 250);
}
break;
} else {
if (item.isChecked()) {
break;
} else {
if (activity instanceof A) {
userFlavorsMap.clear();
if (flavorContainer.getChildCount() > 0){
flavorContainer.removeAllViews();
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(activity, G.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(intent);
}
}, 250);
}
break;
}
}
return false;
}
但是,如果用户切换到Activity,例如“C”并折叠应用程序,那么返回应用程序后会打开“A”。如何完成代码,以便当我返回应用程序时,它会打开最后打开的 Activity,但所有最近的 Activity 都不会在堆栈中?
在manifect android:launchMode="singleTop"
【问题讨论】:
-
覆盖 onBackPressed 方法并在那里开始主要活动
-
如果您不想返回某些活动,请在打开下一个活动时
finish()他们。因此,当您按回时,它们不在堆栈中,只是 A。
标签: java android android-activity