首页 > 解决方案 > 为什么单击后退按钮时 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();
    }
}

有什么建议么?

标签: androiddata-bindingnavigation-drawer

解决方案


尝试添加到清单: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);
}

推荐阅读