代码之家  ›  专栏  ›  技术社区  ›  Hussain Akbar

使用getOnBackPressedDispatcher在后退按钮上退出应用程序

  •  0
  • Hussain Akbar  · 技术社区  · 2 年前

    要覆盖API中低于33的后退按钮的操作,可以使用

    @Override
    public void OnBackPressed(){
      finish();
    }
    

    既然这已经被弃用了,我正试图让getOnBackPressedDispatcher工作起来。

    从我的第一个活动开始,我使用回调按钮开始第二个活动:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void openSecondActivity(View view) {
            Intent intent = new Intent(this, SecondActivity.class);
            startActivity(intent);
        }
    }
    

    现在,在第二个活动中,我希望后退按钮退出应用程序。

    public class SecondActivity extends AppCompatActivity  {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
    
            getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
                @Override
                public void handleOnBackPressed(){
                    finish();
                }
            });
        }
    }
    

    然而,这并不奏效。按下后退按钮,我将返回到第一个活动。

    我做错了什么?

    1 回复  |  直到 2 年前
        1
  •  2
  •   tomerpacific    2 年前

    进入第二个活动时,您应该通过调用finish来结束第一个活动。

    public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void openSecondActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
        finish();       /// <----- HERE
     }
    }
    

    此外,我建议阅读 launch modes .