当我按手机的后退按钮时,应用程序关闭

时间:2019-04-23 20:32:08

标签: java android

我制作了一个包含许多活动的应用程序,并且所有活动都包含一个底部导航栏。我用finish();在没有任何内存泄漏问题的意图之后,但是当我按下手机的后退按钮时,该应用程序将关闭。我该怎么办?

//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 个答案:

答案 0 :(得分:0)

在每种情况下都请移除开关中的finish()

如果要忽略后退按钮单击,则可以在活动中添加此代码。

@Override
public void onBackPressed() {
   //Do anything if you wish
}

答案 1 :(得分:0)

由于您已经完成了所有活动,所以有活动保留在后台或后台。因此该应用程序将关闭。

您可以使用视图分页器为底部导航视图填充片段。这是Google Material Design指导方针的正确方法。

请勿在底部导航视图中使用活动。

如果仍然继续进行活动,则重写activtiy的onBackpress方法。

答案 2 :(得分:0)

如果我正确理解了您的问题,那么您希望用户能够返回以前的活动,而您的应用程序不会引起任何内存泄漏(通过一次又一次地启动相同的活动)

解决方案:

  • onNavigationItemSelected中的每个案例中删除finish()
  • 转到清单文件,然后将android:launchMode="singleInstance"添加到每个活动
  • Ovveride onBackPressed,以便它在dcanh121所说的首次启动活动中不起作用。

如果您执行此操作,那么如果用户尝试打开之前已经打开过的同一活动,它将导致该应用打开前一个活动,而不是创建一个新活动。(read more about this

因此,您不会遇到任何内存泄漏问题:)