我已经制作了一个包含许多活动的应用程序,并且我在所有活动中都包含了一个底部导航栏。我用完成();在任何意图不出现任何内存泄漏问题之后,但是当我按下手机的后退按钮时,应用程序将关闭。我应该怎么办?//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; } });
3 回答

守着星空守着你
TA贡献1799条经验 获得超8个赞
每箱拆下finish()开关。
如果您想忽略后退按钮的点击,那么您可以在活动中添加此代码。
@Override
public void onBackPressed() {
//Do anything if you wish
}

侃侃尔雅
TA贡献1801条经验 获得超16个赞
如果我正确理解您的问题,您希望用户能够返回以前的活动,而您的应用程序不会导致任何内存泄漏(通过一次又一次地启动相同的活动)
解决方案:
从每个案例中删除finish()
onNavigationItemSelected
转到您的清单文件并添加
android:launchMode="singleInstance"
到每个活动如 dcanh121 所说,Ovveride onBackPressed 使其在您首次启动的活动中不执行任何操作。
如果你这样做,那么如果用户尝试打开之前已经打开的同一个活动,它将导致应用程序打开前一个活动而不是创建一个新活动..(阅读更多关于这个)
因此你不会有任何内存泄漏问题:)

慕森王
TA贡献1777条经验 获得超3个赞
由于您正在完成每个活动,因此在后台或后台中仍有 o 活动。所以应用程序关闭。
您可以使用视图寻呼机为底部导航视图膨胀片段。这是谷歌材料设计指南的正确方法。
切勿将活动用于底部导航视图。
如果你继续你的活动,然后覆盖 activtiy 的 onBackpress 方法。
添加回答
举报
0/150
提交
取消