Tôi muốn Hoạt động trên ngăn Hoạt động của ứng dụng của tôi chỉ có một phiên bản. Tôi có một số màn hình là ListActivities và tôi không muốn đi qua nỗi đau và đau khổ của việc cập nhật các danh sách trong một phiên bản trước của ListActivity khi một thể hiện khác của ListActivity đó được thay đổi (thêm vào, chỉnh sửa, loại bỏ, vv) (hoặc là có một cách dễ dàng để làm điều này?).startActivityForResult không hoạt động đúng với launchMode singleInstance
Lưu ý: Tôi đã đọc rằng SingleTop sẽ thực hiện điều này (mặc dù nó phá hủy Hoạt động nếu bạn nhấn nút quay lại), nhưng nó không hoạt động. Tôi có một trình đơn và nếu tôi truy cập vào màn hình Hộp thư đến, sau đó tôi truy cập vào màn hình Danh sách phát nhanh của mình, sau đó tôi truy cập lại vào màn hình Hộp thư đến, nó sẽ tạo một Hoạt động hộp thư đến mới.
Ngay bây giờ, trên ListActivities của tôi, tôi đã launchMode được đặt thành singleInstance. Vấn đề là: Nếu tôi khởi chạy một Activity khác bằng startActivityForResult, trình xử lý onActivityResult sẽ kích hoạt ngay lập tức (trước khi Activity mới được tạo). Khi tôi thực hiện thao tác cần thiết trên màn hình tiếp theo để trả về kết quả, trình xử lý onActivityResult không kích hoạt.
Điều gì đang xảy ra?
Sau đây là cách tôi cháy Hoạt động mới:
Intent intentLaunchQuickList = new Intent(ActivityMyList.this, ActivityQuickList.class);
startActivityForResult(intentLaunchQuickList, REQUEST_QUICKLIST);
Dưới đây là cách tôi trả lại kết quả:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
QuickListItem qlItem = m_Adapter.getItem(position);
if (qlItem != null && qlItem.getQLId() != -1) {
Intent data = new Intent();
data.putExtra("ql_id", qlItem.getQLId());
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
}
else {
getParent().setResult(Activity.RESULT_OK, data);
}
}
finish();
}
Đây là handler onActivityResult tôi:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_QUICKLIST) {
if (resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras();
if (extras != null) {
int id = extras.getInt("ql_id");
if (id > 0) {
launchQLItemsThread(id);
}
}
}
}
}
Cảm ơn bạn đã phản hồi. Tôi hiểu những gì bạn muốn tôi làm, tuy nhiên, nó sẽ không gây ra vấn đề? Tôi rõ ràng sẽ cần phải làm điều tương tự trong trình xử lý onSaveInstanceState và onRestoreInstanceState. Nếu on onResume và onPause tôi đọc và lưu thông tin từ cơ sở dữ liệu, ứng dụng của tôi sẽ đọc không cần thiết từ cơ sở dữ liệu và đọc từ SavedInstanceState nếu nó đã từng gõ trình xử lý onRestoreInstanceState, phải không? Ngoài ra, đây có phải là thực tế phổ biến cho các nhà phát triển Android không? Lưu dữ liệu ListActivity vào một singleton cho nhiều phiên bản của ListActivity? Một lần nữa, cảm ơn bạn đã giúp đỡ – Andrew
Ngoài ra, bạn có thể giải thích tại sao singleTop không hoạt động đối với tôi không? Hay tôi không hiểu nó? – Andrew
SavedInstanceState chỉ hữu ích cho việc khôi phục trạng thái của một cá thể cụ thể của một hoạt động; sử dụng nó để lưu vị trí cuộn, vv, không liệt kê nội dung. Những gì bạn muốn làm là có tất cả các trường hợp hoạt động của bạn chia sẻ một số trạng thái, vì vậy bạn muốn đặt trạng thái đó trong cơ sở dữ liệu nếu nó tồn tại hoặc trong một thành viên tĩnh nếu nó chỉ là một bộ nhớ cache dữ liệu từ mạng.Tôi đề nghị cái sau dựa trên những gì bạn đã nói; chỉ cần sử dụng một DB để giữ dữ liệu bạn vẫn cần phải gửi qua mạng trong tương lai để bạn không bị mất nó. –