我已經制作了一個包含許多活動的應用程序,并且我在所有活動中都包含了一個底部導航欄。我用完成();在任何意圖不出現任何內存泄漏問題之后,但是當我按下手機的后退按鈕時,應用程序將關閉。我應該怎么辦?//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
提交
取消
