Có phải là một thực hành tốt để tải lại Activity
trong Android ?
Điều gì sẽ là cách tốt nhất để làm điều đó? this.finish
và sau đó this.startActivity
với các hoạt động Intent
?
Có phải là một thực hành tốt để tải lại Activity
trong Android ?
Điều gì sẽ là cách tốt nhất để làm điều đó? this.finish
và sau đó this.startActivity
với các hoạt động Intent
?
Câu trả lời:
Bạn chỉ có thể sử dụng
finish();
startActivity(getIntent());
để làm mới một Activity
từ bên trong chính nó.
đối với những người không muốn thấy nháy mắt đó sau khi phương thức rece () chỉ cần sử dụng
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Đây là những gì tôi làm để tải lại hoạt động sau khi thay đổi trở về từ thay đổi tùy chọn.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Điều này về cơ bản gây ra các hoạt động để vẽ lại chính nó.
Cập nhật: Một cách tốt hơn để làm điều này là gọi recreate()
phương thức. Điều này sẽ khiến hoạt động được tạo lại.
Tôi đã thấy các câu trả lời trước đó đã được đưa ra để tải lại hoạt động bằng Intent. Chúng sẽ hoạt động nhưng bạn cũng có thể thực hiện tương tự bằng cách sử dụng phương thức tái tạo () được đưa ra trong chính lớp Activity.
Thay vì viết cái này
// Làm mới hoạt động chính khi đóng hộp thoại
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Điều này có thể được thực hiện bằng cách chỉ viết
recreate();
recreate()
là giải pháp cho tôi - "khởi động lại" hoạt động không hiệu quả với tôi, khi tôi bắt đầu hoạt động bằng cách sử dụng "StartActivityForResult" và nó đã phá vỡ hành vi.
chỉ cần sử dụng
this.recreate();
điều này sẽ kích hoạt phương thức onCreate trong hoạt động
Tôi cần cập nhật danh sách tin nhắn trong một trong các ứng dụng của mình một cách vội vàng, vì vậy tôi chỉ thực hiện làm mới hoạt động UI chính của mình trước khi đóng hộp thoại tôi đang ở. Tôi chắc chắn có nhiều cách tốt hơn để thực hiện điều này.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android bao gồm một hệ thống quản lý quy trình xử lý việc tạo và hủy các hoạt động mà phần lớn phủ nhận bất kỳ lợi ích nào bạn thấy từ việc khởi động lại một hoạt động theo cách thủ công. Bạn có thể xem thêm thông tin về nó tại Ứng dụng cơ bản
Thực tế tốt là gì để đảm bảo rằng các phương thức onPause và onStop của bạn giải phóng mọi tài nguyên mà bạn không cần phải giữ và sử dụng onLowMemory để giảm các hoạt động cần thiết đến mức tối thiểu.
trong một số trường hợp, đó là cách thực hành tốt nhất trong các trường hợp khác, đó không phải là ý tưởng hay nếu điều đó được định hướng theo bối cảnh nếu bạn chọn làm như vậy bằng cách sử dụng sau đây là cách tốt nhất để truyền từ một hoạt động cho con trai của cô ấy:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
điều này là bất cứ khi nào bạn kết thúc () từ hoạt độngIWishToRun bạn trở lại hoạt động sống của mình
Tải lại toàn bộ hoạt động của bạn có thể là một nhiệm vụ nặng nề. Chỉ cần đặt một phần của mã phải được làm mới trong ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
Và gọi " onResume () " bất cứ khi nào cần.
Tôi không nghĩ rằng đó là một ý tưởng tốt ... sẽ tốt hơn nếu thực hiện một phương pháp sạch hơn. Chẳng hạn, nếu hoạt động của bạn giữ một biểu mẫu, phương thức dọn dẹp chỉ có thể xóa từng tiện ích trong biểu mẫu và xóa tất cả dữ liệu tạm thời. Tôi đoán đó là những gì bạn muốn: khôi phục hoạt động về trạng thái ban đầu.
Sau khi thử nghiệm điều này một thời gian, tôi thấy không có hậu quả bất ngờ nào khi khởi động lại một hoạt động. Ngoài ra, tôi tin rằng điều này rất giống với những gì Android làm theo mặc định khi định hướng thay đổi, vì vậy tôi không thấy lý do để không làm điều đó trong một trường hợp tương tự.
tôi có cùng một vấn đề
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
mã này làm việc cho tôi. Api 17
Trong một hoạt động, bạn có thể gọi recreate()
để "tạo lại" hoạt động (API 11+)
Tôi đã có một cách tiếp cận khác như: thiết lập launchMode
hoạt động của mình thành singleTop
và không gọi finish()
, chỉ cần startActivity(getIntent())
thực hiện công việc. Chỉ cần quan tâm đến dữ liệu mới cả trong onCreate()
vàonNewIntent
. Theo cách của Sush, ứng dụng có thể nhấp nháy như AMAN SINGH đã nói. Nhưng cách tiếp cận của AMAN SINGH vẫn sẽ tạo ra một hoạt động mới, bằng cách nào đó, không cần thiết, ngay cả khi anh ấy đã khắc phục vấn đề 'nháy mắt', tôi nghĩ vậy.
Quá muộn cho câu hỏi này, nhưng nếu ai đó đang tìm kiếm một giải pháp, thì đây là.
Sau khi đăng nhập tôi gặp vấn đề tương tự nên tôi đã sử dụng
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
tôi đã sử dụng nó và nó hoạt động tốt mà không cần
finish()
startActivity(getIntent());
Đối với tôi, nó hoạt động không phải là tạo ra một Ý định khác và trên cùng một ý định mới được tải dữ liệu.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);