2010-09-12 33 views
17

Tôi đang hiển thị ProgressDialog trong phương thức onPreExecute của đối tượng AsyncTask và hủy ProgressDialog theo phương pháp onPostExecute. Trong phương thức doInBackground Tôi đang thực hiện yêu cầu HTTP cho đăng ký người dùng. Tôi muốn cho phép thay đổi hướng màn hình. Khi tôi thay đổi hướng trong khi phương pháp doInBackground vẫn chạy, tôi nhận được tất cả các loại lỗi thú vị như 'IllegalArgumentException: Chế độ xem không được đính kèm với trình quản lý cửa sổ' và 'RegisterScreen có cửa sổ bị rò rỉ ...'Làm thế nào để đối phó với sự thay đổi định hướng với một ProgressDialog hiển thị?

Làm cách nào để tiếp tục để hiển thị số ProgressDialog sau khi thay đổi định hướng? Hoặc có thể, làm cách nào tôi có thể vô hiệu hóa thay đổi định hướng sau khi người dùng yêu cầu gửi đăng ký của họ?

+0

[đây là câu trả lời] [1] Tôi nghĩ rằng đó là giải pháp bạn đang tìm kiếm. [1]: http://stackoverflow.com/a/3821998/1665247 – dvrm

Trả lời

15

Thử thêm thuộc tính này android:configChanges="orientation" vào phần tử Activity của bạn trong tệp AndroidManifest.xml.

+0

điều này đã làm được! ngớ ngẩn của tôi, tôi nên biết đây là sửa chữa. – binnyb

+8

Tôi phải thêm "screenSize" vào mục tiêu này để nhắm mục tiêu API cấp 13 trở lên. Nếu không, nó không hoạt động cho những môi trường đó. android: configChanges = "orientation | screenSize" – notmystyle

+0

Cảm ơn gợi ý screenSize! Tôi đã "định hướng | bàn phím" và đột nhiên nó không hoạt động nữa. Điều này hoạt động hoàn hảo, cảm ơn! – TSGames

6

Bạn có thể thử tắt các thay đổi hướng trong thời gian bạn hiển thị ProgressDialog.

lúc đầu làm:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 

và kích hoạt trở lại sau khi hoàn thành:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

Hope this helps.

(Nếu ai đã có một giải pháp thích hợp, tôi sẽ cũng được quan tâm :-)

+2

Sự cố không thay đổi định hướng. Bạn đang thấy những vấn đề này vì vòng đời hoạt động, phá hủy và tái tạo hoạt động của bạn. Ngăn chặn các thay đổi định hướng sẽ ngăn chặn trường hợp cụ thể này của vòng đời, nhưng cùng một vấn đề sẽ cắt lên khi người dùng nhấn 'Home' trong ProgressDialog và trả về. Hoạt động của bạn nên được thiết kế để đóng cửa và khởi động lại bất cứ lúc nào. – Josh

+0

Điều gì xảy ra nếu AsyncTask của tôi không có trong hoạt động của tôi ... Nó trong một tệp lớp khác phổ biến với nhiều lớp hoạt động. Sau đó, làm thế nào tôi có thể lấy setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); – Debopam

+0

Tuyệt vời nhưng để khóa định hướng ActivityInfo.SCREEN_ORIENTATION_LOCKED hoạt động tốt hơn cho tôi, đặc biệt là ở chế độ ngang. – BlueHazard

4

Bạn muốn xử lý đúng đắn các chu kỳ hoạt động, có nghĩa là tiết kiệm và khôi phục lại trạng thái hoạt động của bạn, chứ không phải cố gắng để ngăn chặn những thay đổi vòng đời . Làm một số đọc trên AsyncTask so với vòng đời hoạt động.

Ví dụ: pause-and-resume-asynctasks-androidwhat-to-do-with-asynctask-in-onpause.

-1

Bạn có thể sử dụng đoạn mã sau vào bạn Manifest

<activity android:label="@string/app_name" 
     android:configChanges="orientation|keyboardHidden" 
     android:name=".your.package"> 
2

Thêm này trong thẻ hoạt động trong ứng dụng manifest.xml

<activity android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:name=".your.package"/>

1

Trong trường hợp của tôi, tôi đã sử dụng

android:configChanges="orientation" 

nhưng nó không hoạt động với tôi

Sau đây là làm việc tốt

<activity android:name=".MyActivity" 
      android:configChanges="orientation|screenSize|screenLayout"> 
</activity> 
Các vấn đề liên quan