2013-08-14 28 views
7

Tôi bắt đầu từ hoạt động A-> B-> C-> D-> E .. khi tôi đi từ D-> E sẽ không có hoạt động trong ngăn xếp nhưng người dùng có thể sử dụng nút quay lại từ D và đi đến C (mà không làm mới Hoạt động C, giống như chức năng trở lại bình thường)Xóa hoạt động trở lại ngăn xếp

Trả lời

17

Bạn có thể thêm BroadcastReceiver vào tất cả các hoạt động bạn muốn đóng (A, B, C, D):

public class MyActivity extends Activity { 
    private FinishReceiver finishReceiver; 
    private static final String ACTION_FINISH = 
      "com.mypackage.MyActivity.ACTION_FINISH"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     finishReceiver= new FinishReceiver(); 
     registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH)); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 

     unregisterReceiver(finishReceiver); 
    } 

    private final class FinishReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(ACTION_FINISH)) 
       finish(); 
     } 
    } 
} 

... và đóng chúng bằng cách gọi ...

sendBroadcast(new Intent(ACTION_FINISH)); 

... trong hoạt động E. Kiểm tra this nice example quá.

+0

bạn tiết kiệm cuộc sống .... cảm ơn một tấn ... – W00di

+1

:) tiếc là đã có quá nhiều cử tri gần đây vấn đề, mặc dù nó hơi khác so với bản sao được đề cập. Các giải pháp trên có thể xuất hiện quá khổ, tuy nhiên, nó là khá linh hoạt và mạnh mẽ :) – Trinimon

+1

Cảm ơn bạn đã chia sẻ giải pháp. Trường hợp này chắc chắn là khác biệt, hoạt động mới không có trong ngăn xếp trước đó. – Roman

5

Thêm cờ FLAG_ACTIVITY_CLEAR_TOP để ý định của bạn để xóa các hoạt động khác của bạn tạo lại chồng khi bạn đang bắt đầu Hoạt động E của bạn như:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

sau đó bắt đầu Hoạt động của bạn:

startActivity(intent) 

biết thêm thông tin về: Task and BackStack

+1

nhưng thats chỉ hoạt động nếu hoạt động đã có trong ngăn xếp – W00di

+0

@sabya: xin giải thích thêm về sự cố của bạn, có một chút không rõ ràng –

+1

từ tài liệu: "Nếu được đặt và hoạt động đang được khởi chạy đã chạy trong hiện tại nhiệm vụ, sau đó thay vì tung ra một trường hợp mới của hoạt động đó, tất cả các hoạt động khác trên đó sẽ bị đóng và Mục đích này sẽ được gửi đến hoạt động cũ (hiện tại trên đầu) như một Mục đích mới ”. (xem http://developer.android.com/reference/android/content/Intent.html) – Trinimon

0

Thêm cờ để itent của bạn nó sẽ xóa tất cả các hoạt động trong một ngăn xếp

Intent intent = new Intent(getApplicationContext(),MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

đây là wat quyền xóa trở lại hoạt động đã có trong một chồng

Hy vọng điều này sẽ giúp ..

+0

không hoạt động hoặc là ... :( – W00di

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