2012-07-01 33 views
5

Tôi đọc nhiều bài viết về vấn đề này như [liên kết này] [1] và một giải pháp là thêm cấu hình định hướng để hiển thị và xử lý sự kiệnCấu hình được thay đổi để ngăn hoạt động onCreate được gọi lại khi xoay. Tôi đã làm nó và sự kiện được kích hoạt đúng cách, tuy nhiên, sau khi thực hiện này, phương thức onCreate cũng được thực hiện! tại sao? những gì tôi đang mất tích? Cảm ơn bạnhoạt động trên Android được khởi động lại khi định hướng thay đổi

manifest,

<activity 
      android:name="webPush" 
      android:configChanges="keyboardHidden|orientation"/> 

hoạt động,

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     setContentView(R.layout.vistaaib); 
    } 

@Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.vistaaib); 
... 

Trả lời

11

Tôi nghĩ rằng điều này sẽ làm việc .........

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

Bắt đầu với Android 3.2 (API mức 13), màn hình sẽ " kích thước "cũng thay đổi khi thiết bị chuyển giữa hướng dọc và ngang. Vì vậy, nếu bạn muốn ngăn chặn khởi động lại runtime do thay đổi hướng khi phát triển cho cấp API 13 hoặc cao hơn bạn phải sử dụng

android:configChanges="orientation|screenSize" 
+0

vẫn kích hoạt onCreate sau sự kiện onConfigChanges – Jaume

+0

Bạn đã đề cập điều này trong tệp AndroidManifest trong hoạt động cần được ngăn chặn gọi onCreate() –

+0

có, như được đăng, webPush là hoạt động mà phương thức onCreate của nó cần được ngăn chặn – Jaume

1

Viết này hai dòng mã trong file manifest trong Hoạt động đó.

Dường như điều này sẽ giải quyết được sự cố của bạn. <activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden"/>

+0

vẫn kích hoạt onCreate sau sự kiện onConfigChanges – Jaume

1

Hoạt động của bạn sẽ được khởi động lại trên bất kỳ thay đổi cấu hình nào. Nhiều khả năng nó đang được khởi động lại vì trạng thái bàn phím thay đổi. Thử thêm này để các thuộc tính của hoạt động:

android:configChanges="orientation|keyboard|keyboardHidden" 
+0

vẫn kích hoạt onCreate sau onConfigChanges kiện – Jaume

+1

nếu bạn muốn ngăn chặn khởi động lại thời gian chạy vì khuynh hướng thay đổi khi phát triển cho API cấp 13 trở lên, bạn phải bao gồm giá trị "screenSize" ngoài giá trị "định hướng". Đó là, bạn phải decalare android: configChanges = "orientation | screenSize" – Rashid

0

Nếu bạn đang làm việc cho cấp API 12 hoặc thấp hơn

Trong file menifest, đặt chỉ sau khi khai báo Tên Hoạt động của bạn.

android:configChanges="orientation" 

e.g.-

<activity 
     android:name=".NameOfYourActivity" 
     android:configChanges="orientation"/> 

Và trong android 3.2 (cấp API 13) hoặc phiên bản cao hơn kích thước màn hình cũng thay đổi luân phiên thay đổi để tuyên bố này quá.

cho điều này,

android:configChanges="orientation|screenSize" 
2

I Did này. Tôi đã thêm mã này vào tệp kê khai và mã hoạt động hoàn hảo.

<activity 
     android:name="?" 
     android:label="@string/?" 
     android:theme="@style/?" 
     android:configChanges="orientation|screenSize"> 

Bạn sẽ cần thêm hoạt động này dưới hoạt động nếu bạn muốn thay đổi điều gì đó khi thiết bị xoay vòng.

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 
0

Tiếp theo có thể là lý do

sự kiện: screensize

Kích thước màn hình hiện tại có sẵn đã thay đổi. Điều này thể hiện sự thay đổi về kích thước hiện có, liên quan đến tỷ lệ khung hình hiện tại, do đó sẽ thay đổi khi người dùng chuyển đổi giữa chế độ ngang và dọc.Tuy nhiên, nếu ứng dụng của bạn nhắm mục tiêu cấp API 12 trở xuống thì hoạt động của bạn luôn xử lý thay đổi cấu hình này (thay đổi cấu hình này không khởi động lại hoạt động của bạn, ngay cả khi chạy trên thiết bị Android 3.2 trở lên). gia tăng ở mức API 13.

để cùng với "định hướng" add "screensize" cũng

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