android - 为什么单击后退按钮时 MainActivity 会重新打开?
问题描述
当我单击后退按钮时,我的 MainActivity 会重新打开。为什么会这样?我在 MainActivity 中集成了导航抽屉,之后,当我单击后退按钮时,将重新创建 MainActivity。如果我再次单击后退按钮,应用程序将关闭。
这是我的 MainActivity 代码:
public class BuildingsActivity extends AppCompatActivity implements BuildingsNavigator,
BuildingItemNavigator, NavigationView.OnNavigationItemSelectedListener {
private ActivityBuildingsBinding binding;
private BuildingsViewModel viewModel;
private DrawerLayout drawerLayout;
private NavigationView navigationView;
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_buildings);
viewModel = new BuildingsViewModel(this);
viewModel.loadBuildings();
viewModel.dataLoading.set(true);
if (!AppUtils.isOnline()) {
startForResult();
}
binding.setViewModel(viewModel);
binding.recycler.setLayoutManager(new GridLayoutManager(getApplicationContext(), 2));
binding.recycler.setAdapter(new BuildingAdapter(new ArrayList<Building>(0), this, this));
drawerLayout = binding.drawer;
toolbar = binding.actionToolbar;
setSupportActionBar(toolbar);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawerLayout.setDrawerListener(toggle);
toggle.syncState();
navigationView = binding.buildingNavigation;
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.building_nav_item:
break;
case R.id.delivery_nav_item:
Intent deliveryIntent = new Intent(this, new DeliveryActivity().getClass());
startActivity(deliveryIntent);
item.setChecked(false);
break;
}
drawerLayout.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
有什么建议么?
解决方案
尝试添加到清单:android:noHistory="true"
<activity android:name=".MainActivity"
android:screenOrientation = "portrait"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
或者您可以为此按钮编写处理程序
@Override
public void onBackPressed() {
//add what you need, for example if you want to start another activity:
Intent intent = new Intent(AnotherActivity.this, MainActivity.class);
//or if you want to close:
this.finish();
//or
finish();
}
或者如果你关于 ActionBar 上的按钮,你可以在菜单中写它
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_item:
//something
return true;
case android.R.id.home:
//what you need
return true;
}
return super.onOptionsItemSelected(item);
}
推荐阅读
- php - 如何在显示 mysql 表的函数中包含分页?
- c# - 如何使用 fo-DICOM 删除或更新私有标签?
- r - ts 命令在 R 上给了我错误的数据
- excel - 在 VBA 中:我可以使用查找函数来定义一个变量,然后用于定义一个范围吗?
- mysql - 组和子查询问题
- sql - PostgreSQL - 如何找到与它匹配的记录的行,其值高于给定值?
- java - 从浏览器边框验证按钮填充
- java - 如何在 Android Studio 的单独活动中从单选按钮调用信息
- python - 如何绘制一个 DataFrame 列与另一列,每个列在其自己的子图中由第三列?
- python - 如何使用 init 参数为处理程序设置龙卷风路由?