5

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(); 

    } 
} 

}

+1

xin vui lòng gửi mã onOrientationChanged của bạn quá –

+1

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. –

+0

Unfortunatelly Tôi không có quyền truy cập vào điện thoại thực hiện tại – nixau

Trả lời

5

Đây là lỗi tài liệu trong trình giả lập. Một thiết bị thực sẽ không thể hiện hành vi của vòng đời kép này. Tôi đã có cùng một vấn đề một lúc trước và nó biến mất trên một thiết bị thực sự.

Tôi khuyên bạn nên bỏ qua sự cố nếu bạn chỉ có thể thử nghiệm các thay đổi định hướng theo một hướng cho đến khi bạn có được bàn tay trên điện thoại thực. Nếu không, bạn có thể "bỏ qua" tập thứ hai của các cuộc gọi vòng đời bằng cách giữ một boolean tĩnh xung quanh cho biết bạn đã trải qua tập đầu tiên.

Xem this issue report để biết thêm thông tin.

+0

gặp sự cố trên motorola xoom, onCreate được gọi hai lần một hàng quá http://stackoverflow.com/posts/3922257 – RzR

3

Bạn đã cố gắng sử dụng onConfigurationChanged?

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE)… 
+0

Tôi gặp vấn đề tương tự với phương thức 'findViewById'. Đó là lẻ nhưng có vẻ như bố cục khai báo được chỉ định trong tệp '.xml' chưa được hiển thị. – nixau

+0

anyway onConfigurationChanged có vẻ là giải pháp tốt hơn khi so sánh với thuê bao gọi lại OrientationEventListener – nixau

1

Thêm android: configChanges = "định hướng" trong file manifest trong thẻ hoạt động như

<activity android:label="@string/app_name" android:configChanges="orientation" android:name=".com.androidpeople">

Các vấn đề liên quan