Tôi cần xử lý các thay đổi định hướng trong ứng dụng Android của mình. Vì mục đích này, tôi quyết định sử dụng lớp tiện lợi OrientationEventListener
. Nhưng phương pháp gọi lại của anh ta có hành vi hơi lạ.Các sự cố khi xử lý các thay đổi hướng
Ứng dụng của tôi bắt đầu ở chế độ dọc và sau đó cuối cùng chuyển sang chế độ xem lanscape. Tôi có một số thực thi mã tùy chỉnh trong phương thức gọi lại onOrientationChanged
cung cấp một số logic xử lý giao diện người dùng bổ sung - nó có một vài cuộc gọi đến findViewById
. là gì lạ là khi chuyển đổi lại từ phong cảnh đến chế độ chân dung onOrientationChanged
callback được gọi là hai lần, và những gì còn tồi tệ hơn - cuộc gọi thứ hai là đối phó với xấuContext
- Phương pháp findViewById
bắt đầu trở null
. Những cuộc gọi được thực hiện ngay từ MainThread
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listener = new OrientationListener();
}
@Override
protected void onResume() {
super.onResume();
// enabling listening
listener.enable();
}
@Override
protected void onPause() {
super.onPause();
// disabling listening
listener.disable();
}
tôi đã nhân rộng các hành vi tương tự với một hình nộm Activity
mà không cần bất kỳ logic ngoại trừ một thỏa thuận với định hướng hadling. Tôi bắt đầu chuyển đổi định hướng từ trình mô phỏng Android 2.2 bằng cách nhấn Ctrl + F11 Điều gì có thể sai?
UPD: lớp Inner mà thực hiện OrientationEventListener
private class OrientationListener extends OrientationEventListener {
public OrientationL() {
super(getBaseContext());
}
@Override
public void onOrientationChanged(int orientation) {
toString();
}
}
}
xin vui lòng gửi mã onOrientationChanged của bạn quá –
bạn đã thử này khi thử nghiệm trên một chiếc điện thoại thật không? Tôi đã có một số vấn đề với những thay đổi định hướng chỉ xảy ra khi thử nghiệm trên trình giả lập. Nó đã có một cái gì đó để làm với giả lập giả tạo sự thay đổi định hướng màn hình - Tôi cũng đã có một vấn đề với nó tái tạo các ứng dụng hai lần. –
Unfortunatelly Tôi không có quyền truy cập vào điện thoại thực hiện tại – nixau