Tôi không biết nếu một giải pháp tốt nhất, nhưng tôi mô tả nó ở đây:
Trước hết, bạn cần chứng chỉ với lớp Ứng dụng của ứng dụng của bạn nằm trong bảng kê khai của bạn về điều này:
<application
android:name=".App"
...
Thứ hai, trong ứng dụng lớp học của tôi, tôi đã làm như thế này:
public class App extends Application {
public static boolean isOrientationChanged = false;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onConfigurationChanged(@NotNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ||
newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
isOrientationChanged = true;
}
}
}
Thứ ba, bạn cần đặt cờ thành Thay đổi định hướng, trong trường hợp của tôi, tôi luôn đặt nó khi hoạt động trước đó trong điều hướng ứng dụng được gọi, do đó chỉ gọi một lần khi hoạt động sau được tạo.
isOrientationChanged = false;
Vì vậy, mỗi khi tôi thay đổi hướng của màn hình trong bối cảnh đó, tôi đặt nó mỗi khi nó thay đổi cài đặt này, nó sẽ kiểm tra xem có thay đổi hướng hay không, nếu vậy, nó xác nhận nó dựa trên giá trị của cờ đó.
Về cơ bản, tôi đã phải sử dụng nó bất cứ khi nào tôi thực hiện một yêu cầu trang bị thêm không đồng bộ, mà anh ta gọi mỗi khi thay đổi hướng, liên tục làm hỏng ứng dụng:
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
Tôi không biết nếu đó là giải pháp thanh lịch và đẹp nhất, nhưng ít nhất ở đây nó có chức năng :)
Screen.lockOrientation(this)từ github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/ trộm cho việc này. Nó cho phép mở khóa mà bảng kê khai không có.