2011-07-27 26 views
7

Tôi không thể cho cuộc sống của tôi tìm ra cách để có một hoạt động được làm mới sau khi nhấn nút quay lại. Tôi hiện đang có một hoạt động A bắn một ý định để goto B và trong khi trên hành động B nếu bạn nhấn trở lại tôi muốn quay trở lại để hành động A nhưng có nó làm mới chính nó. Tôi có thể sử dụng ý định này để làm mới hoạt động hiện tại:Sử dụng onResume() để làm mới hoạt động

Intent refresh = new Intent(this, Favorites.class); 
    startActivity(refresh); 
    this.finish(); 

Nhưng tôi không thể tìm hiểu cách sử dụng đúng cách chức năng onResume() để làm mới hành động của tôi A sau khi quay lại.

+1

Lý do có khả năng là lược đồ làm mới hiện tại của bạn hoạt động là do bạn đang chạy hoạt động trong tiêu chuẩn launchMode. Điều này có nghĩa là mỗi lời gọi hàm startActivity (refresh) sẽ tạo ra một cá thể hoạt động mới A. Vì mỗi cá thể mới đi qua onCreate(), việc tạo ra các cá thể không cần thiết này mang lại vẻ ngoài làm mới hoạt động của bạn. Để làm điều này một cách chính xác, bạn thực sự nên xác định mã trong onCreate() có trách nhiệm "làm mới" hoạt động và di chuyển nó đến onResume(), như Ovidiu đã đề xuất bên dưới. – glorifiedHacker

Trả lời

10

Nếu bạn cần một hành vi đặc biệt của ActivityA khi trở về từ ActivityB, bạn nên sử dụng startActivityForResult(Intent intent, int requestCode) thay vì startActivity(Intent intent):

startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE); 

Bằng cách này, bạn sẽ có thể phát hiện chấm dứt ActivityB 's trong ActivityA do quá tải onActivityResult(int requestCode, int resultCode, Intent intent):

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == REQUEST_CODE) { 
     doRefresh(); // your "refresh" code 
    } 
} 

này hoạt động ngay cả khi bạn chấm dứt ActivityB do báo chí của nút quay lại. resultCode sẽ là RESULT_CANCELLED theo mặc định trong trường hợp đó.

1

Bạn cần đặt mã cập nhật giao diện người dùng của Hoạt động của bạn theo phương thức onResume(). Có lẽ bạn nên đăng thêm một số mã hoặc giải thích chính xác bạn đang cố cập nhật cái gì.

+0

Tôi có một hoạt động chứa một listview với 5 chuỗi được lấy từ cơ sở dữ liệu của tôi. Nó đang chạy với phương thức BackService tức là nếu có thay đổi trong cơ sở dữ liệu, tôi sẽ nhận được một thông báo mới với một chuỗi. Nếu tôi bấm vào thông báo đó listview nên chứa chuỗi đó cũng có. OnResume() có cho phép tôi làm điều đó không? – suraj

3

sử dụng startActivityForResult(intent, requestCode); để bắt đầu Activity B từ Activity A

sau đó trong Activity A override onActivityResult(int requestCode, int resultCode, Intent data)

đó bạn có thể làm mới của bạn Activity A

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