5

Tôi đang gặp sự cố với sự kiện báo cáo OrientationEventListener ngay cả sau khi tôi đã vô hiệu hóa sự kiện đó.onOrientationChanged() đang được gọi khi OrientationEventListener bị tắt

Tôi đang làm việc với ba đoạn trong bố cục tab và chỉ một trong các đoạn cần thay đổi hướng. Khi tôi rời khỏi đoạn này, tôi muốn các sự kiện định hướng dừng lại có hiệu lực.

Phần vòng đời của mã của tôi là như sau:

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 

    if (orientationEventListener == null) 
    { 
     Log.w(LogTags.MOBILE_MONITOR, "Creating orientationListener in " + this.toString()); 
     orientationEventListener = new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_NORMAL) { 
      @Override 
      public void onOrientationChanged(int angle) { 

       ...Do work using getActivity()... 

      } 
     }; 
    } 

} 

@Override 
public void onResume() { 
    super.onResume(); 
    orientationEventListener.enable();  
} 

@Override 
public void onPause() { 
    super.onPause(); 
    orientationEventListener.disable(); 
} 

vấn đề này được đưa ra khi tôi chuyển đổi các đoạn trong khi di chuyển thiết bị. Khi tôi cố gắng gọi getActivity() trong onOrientationChanged(int angle) của số OrientationEventListener, cuộc gọi trả về null, có nghĩa là tôi nhận được ngoại lệ con trỏ null nếu tôi cố gắng sử dụng nó.

Trong khi tôi có thể thêm một kiểm tra trống ở đây, tôi chỉ muốn biết lý do tại sao tôi nhận được sự kiện định hướng khi tôi đã vô hiệu hóa người nghe rõ ràng. Nếu tôi kiểm tra OrientationEventListener tại điểm hỏng hóc, nó thậm chí còn báo cáo mEnabled=false. Có cách nào để ngăn sự kiện được truyền cho người nghe của tôi không?

+0

Hi Sleeke, bạn đã tìm thấy giải pháp nào cho việc này chưa. Tôi đang đối mặt với cùng một vấn đề. –

Trả lời

0

Nếu bạn đặt hướng đến ActivityInfo.SCREEN_ORIENTATION_SENSOR, hoạt động sẽ tự động được xoay bằng cảm biến định hướng vật lý. https://developer.android.com/reference/android/R.attr.html#screenOrientation

Giải quyết vấn đề này bằng cách đặt lại chế độ hướng cho hoạt động. Ví dụ: đặt lại bố cục dọc mặc định:

mOrientationEventListener.disable(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
Các vấn đề liên quan