Làm cách nào để vô hiệu hóa sự kiện onCreate khi tôi xoay thiết bị của mình theo hướng dọc? Bởi vì khi ứng dụng bắt đầu nó sẽ nhận được nhiều dữ liệu của nó từ Internet, và nó sẽ là xấu để tải xuống dữ liệu này mỗi khi người dùng biến thiết bị của mình.Làm thế nào để vô hiệu hóa hành động onCreate khi định hướng sẽ thay đổi?
Trả lời
Trong thẻ Hoạt động của ghi manifest
android: configChanges = "định hướng | screensize"
dụ:
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize">
Trong tệp manifest.xml thêm android: configChanges = "orientation" cho hoạt động.
Sử dụng một tấm séc cờ trong onCreate. Hãy cờ = true tại thời điểm khởi tạo/khai thêm android: configChanges = "định hướng" trong ur file manifest
Trong file java ur ghi đè onConfigurationChanged phương pháp và làm cho lá cờ như sai.
Sau khi thực hiện quá trình này, bạn sẽ được gọi nhưng mã đề cập trong số nếu sẽ không được gọi. Di chuyển mã ur bên trong điều kiện nếu.
thử sử dụng tính năng này.
static boolean flag = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if(flag)
Log.d("ONCREATE", "flag is true");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
Log.d("ONCONFIGCHANGE", "CALLED");
flag = false;
super.onConfigurationChanged(newConfig);
}
phương pháp thay thế là sử dụng phương pháp onSaveInstanceState
để lưu bất kỳ dữ liệu phi dai dẳng vào một Bundle. Tiểu bang phải được khôi phục trong số onRestoreInstanceState
hoặc trong onCreate
. Trong onCreate
bạn phải phân tích thông số savedInstanceState
và nếu nó không phải là null thì bạn nên khôi phục trạng thái đã lưu trước đó.
Giải pháp này là giải pháp tốt nhất hiện nay. trong file manifest của bạn thêm
<activity
android:configChanges="keyboardHidden|orientation|screenSize"
android:name="your activity name"
android:label="@string/app_name"
android:screenOrientation="landscape">
</activity
Và trong lớp hoạt động của bạn thêm đoạn mã sau
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
//do your stuff here
//
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//do your stuff here
}
}
Đối với C# Xamarin Tôi có giải pháp này:
using System.Collections.Concurrent;
public static class ObjectExchanger
{
private static ConcurrentDictionary<string, object> ObjectList = new ConcurrentDictionary<string, object>();
/// <summary>
/// Add key and object. Do not add the same key twice.
/// </summary>
/// <param name="key"></param>
/// <param name="obj"></param>
public static void Add(string key, object obj)
{
ObjectList.GetOrAdd(key, obj);
}
/// <summary>
/// Get object via key. Do net Get twice. Key/object will remove after get it once.
/// </summary>
/// <param name="key"></param>
public static object Get(string key)
{
object obj = null;
ObjectList.TryRemove(key, out obj);
return obj;
}
}
Bạn có thể sử dụng trong trong OnCreate Phương pháp sao lưu và khôi phục dữ liệu của bạn cho hoạt động sau khi xoay.
- 1. Làm thế nào để vô hiệu hóa mã định dạng tự động PDT Eclipse khi dán
- 2. Làm thế nào để vô hiệu hóa định dạng tự động khi lưu trong Eclipse?
- 3. Làm thế nào để vô hiệu hóa sự thay đổi thụt lề tab tự động sau khi sao chép?
- 4. Thay đổi nguyên mẫu window.location để vô hiệu hóa một số chuyển hướng nhất định?
- 5. Làm cách nào để vô hiệu hóa nội dung của MobileSafari trong việc thay đổi định hướng?
- 6. Làm thế nào để vô hiệu hóa cảnh báo python
- 7. Làm thế nào để vô hiệu hóa rìa trong Emacs?
- 8. Làm thế nào để thay đổi màu phông chữ của một TextBox bị vô hiệu hóa?
- 9. Làm thế nào để biết khi nào để vô hiệu hóa một 'NSTimer`
- 10. Làm thế nào để vô hiệu hóa javax.swing.JButton trong java?
- 11. python: làm thế nào để vô hiệu hóa tự động loại khi tạo từ điển
- 12. Làm cách nào để vô hiệu hóa hành động tải trước khi người dùng gửi biểu mẫu?
- 13. emacs:. Làm thế nào để vô hiệu hóa # file tạo
- 14. Làm thế nào để vô hiệu hóa hành vi gửi của asp: ImageButton?
- 15. Làm thế nào để vô hiệu hóa nút trong UIActionSheet?
- 16. Làm thế nào để vô hiệu hóa subversion trong netbeans
- 17. Làm thế nào để vô hiệu hóa OUTFILE và INFILE?
- 18. Vô hiệu hóa đổi tên id tự động Visual Studio
- 19. Làm thế nào để vô hiệu hóa PerfWatson trong VS2012?
- 20. Làm thế nào để bạn vô hiệu hóa hiệu ứng MouseOver trên một Nút trong WPF?
- 21. Làm thế nào để vô hiệu hóa DrawerLayout Shadow
- 22. Làm thế nào để vô hiệu hóa Tomcat trang chủ
- 23. Làm thế nào để vô hiệu hóa cảnh báo #pragma?
- 24. Cách thay đổi hình ảnh và vô hiệu hóa UIBarButtonItem
- 25. C# Làm thế nào để vô hiệu hóa một phím
- 26. làm thế nào để vô hiệu hóa fling của scrollView
- 27. Làm thế nào để vô hiệu hóa hành vi mặc định của một Neo trong jQuery Mobile (iOS)
- 28. Làm thế nào để vô hiệu hóa thay đổi kích thước của subview của NSSplitView trong Interface Builder?
- 29. Làm thế nào để vô hiệu hóa thanh cuộn mặc định cho textareas trong IE8?
- 30. Tôi làm cách nào để vô hiệu hóa _moz_resizing?
Thận trọng: Bắt đầu với Android 3.2 (API cấp 13), "kích thước màn hình" cũng thay đổi khi thiết bị chuyển giữa hướng dọc và ngang. Do đó, nếu bạn muốn ngăn khởi động lại thời gian chạy do thay đổi định hướng khi phát triển cho API cấp 13 trở lên (như được khai báo bởi thuộc tính minSdkVersion và targetSdkVersion), 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". (http://developer.android.com/guide/topics/resources/runtime-changes.html) – Rubix
Thông tin tốt Rubix. +1 –
Rubix: Định hướng và screenSize giá trị có nghĩa là gì ở đây. Câu hỏi chỉ dành cho sự tò mò của tôi. – vgokul129