我已经制作了一个包含许多活动的应用程序,并且我已经为所有活动添加了一个底部导航栏。我用完了();在任何不会出现任何内存泄漏问题的意图之后但是当我按下手机的后退按钮时应用程序关闭。我该怎么办?
//an intent of my app
Button btnsuita = (Button) findViewById(R.id.souita_btn);
btnsuita.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(HotelRooms.this, HotelRoomsSouita.class);
startActivity(intent);
finish();
}
});
//An Example of Bottom Navigation Bar
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.BottomNavView_bar);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
Menu menu = bottomNavigationView.getMenu();
android.view.MenuItem menuItem = menu.getItem(0);
menuItem.setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.ic_home:
Intent intent1 = new Intent(HotelRoomsSouita.this, MainMenu.class);
startActivity(intent1);
finish();
break;
case R.id.ic_back:
Intent intent2 = new Intent(HotelRoomsSouita.this, HotelRooms.class);
startActivity(intent2);
finish();
break;
case R.id.ic_contact_us:
Intent intent3 = new Intent(HotelRoomsSouita.this, Mail.class);
startActivity(intent3);
finish();
break;
}
return false;
}
});
每次都要在开关中移除finish()
。
如果要忽略后退按钮单击,则可以在活动中添加此代码。
@Override
public void onBackPressed() {
//Do anything if you wish
}
由于您正在完成所有活动,因此背板或背景中仍有o活动。所以应用程序关闭。
您可以使用视图寻呼机为底部导航视图充气片段。这是谷歌材料设计指导线的正确方法。
切勿将活动用于底部导航视图。
如果继续您的活动,仍然会覆盖活动的onBackpress方法。
如果我正确理解您的问题,您希望用户能够返回以前的活动,而您的应用程序不会导致任何内存泄漏(通过一次又一次地启动相同的活动)
解:
onNavigationItemSelected
中的每个案例中删除finish()android:launchMode="singleInstance"
添加到每个活动如果你这样做,那么如果用户试图打开之前已经打开的同一个Activity,它将导致应用程序打开上一个活动而不是创建一个新活动..(read more about this)
因此你不会有任何内存泄漏问题:)