How to disable android back button across every screen?

Viewed 75

Do we need to override onBackPressed() method for every screen? I do not see any other ways to do so. Please let me know if there is a more simpler way to do so.

3 Answers

make a super class for all of your activities e.g.

class BaseActivity extends AppCompatActivity {

    @Override
    void onBackPressed() {  }

}

and then make all of your activities inherit from this class

class MyActivity1 extends BaseActivity { ... }

class MyActivity2 extends BaseActivity { ... }

class MyActivity3 extends BaseActivity { ... }

And all of your activities now wouldn't react to any back press event!

Create a BaseActivity and override onBackPressed() method with required logic And extend BaseActivity in all Activity

abstract class BaseActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onBackPressed() {
        //super.onBackPressed()
    }
}

extend this BaseActivity instead of AppCompatActivity

class MainActivity : BaseActivity() {
    //Your code
}

If you want to handle back button manually for some Activity then just override it for those Activity.

If you are using FragmentActivity or AppCompatActivity you can do this with OnBackPressedDispatcher that controls dispatching system back presses.

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(@NonNull Activity activity,
                                          @Nullable Bundle savedInstanceState) {
                if (activity instanceof FragmentActivity) {
                    ((FragmentActivity) activity).getOnBackPressedDispatcher()
                            .addCallback(new OnBackPressedCallback(true) {
                                @Override
                                public void handleOnBackPressed() {
                                    // nothing to do
                                }
                            });
                }
            }

            @Override
            public void onActivityStarted(@NonNull Activity activity) {
            }

            @Override
            public void onActivityResumed(@NonNull Activity activity) {
            }

            @Override
            public void onActivityPaused(@NonNull Activity activity) {
            }

            @Override
            public void onActivityStopped(@NonNull Activity activity) {
            }

            @Override
            public void onActivitySaveInstanceState(@NonNull Activity activity,
                                                    @NonNull Bundle outState) {
            }

            @Override
            public void onActivityDestroyed(@NonNull Activity activity) {
            }
        });
    }
}

AndroidManifest.xml:

<application 
    android:name=".App"
    ...
    />
Related