2010-08-26 10 views
7

Tôi có một ứng dụng sử dụng overridePendingTransition để thực hiện một số hoạt ảnh tùy chỉnh khi chuyển từ hoạt động này sang hoạt động khác. Điều này đã có sẵn trong Android 2.0, nhưng tôi muốn làm cho ứng dụng hoạt động trên Android 1.6. Tôi đã tìm ra nếu tôi vừa kiểm tra android.os.Build.VERSION.SDK_INT> android.os.Build.VERSION_CODES.DONUT và nếu không, đừng làm overridePendingTransition.VerifyError, hoặc sử dụng overridePendingTransition trong khi vẫn duy trì tính tương thích?

Tuy nhiên, tôi nhận được một VerifyError, mà tôi giả định là do này: VFY: Không thể giải quyết phương pháp ảo 346: ../../Login: overridePendingTransition (II) V

Há chẳng phải càng tốt sử dụng chức năng mới hơn có điều kiện dựa trên phiên bản SDK?

Trả lời

15

Bạn không thể sử dụng chức năng mới hơn có điều kiện dựa trên phiên bản SDK?

Vâng, đúng vậy.

Tôi sẽ đoán rằng mã của bạn trông như thế này:

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
    overridePendingTransition(...); 
} 

Nếu tôi đúng, thì đó sẽ không hoạt động. VM sẽ cố gắng tìm overridePendingTransition() khi lớp được nạp, không phải khi câu lệnh if() được thi hành.

Thay vào đó, bạn sẽ có thể để làm điều này:

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
    SomeClassDedicatedToThisOperation.overridePendingTransition(this, ...); 
} 

nơi thi hành overridePendingTransition() trong SomeClassDedicatedToThisOperation chỉ gọi overridePendingTransition() trên cung cấp Activity.

Miễn là SomeClassDedicatedToThisOperation không được sử dụng ở bất kỳ nơi nào khác, lớp học sẽ không được tải cho đến khi bạn ở trong thử nghiệm if() và bạn sẽ không nhận được VerifyError.