Android: Nắm bắt sự trở lại của một hoạt động


82

Tôi có một câu hỏi liên quan đến việc khởi động các hoạt động mới. Nó kết thúc với điều này. Tôi có 3 tab trên một chế độ xem

A) contains gMap activity
 B) camera activity
 C) some random text fields.

Yêu cầu là ứng dụng phải chạy ở chế độ Portrait.

Tất cả 3 tab đều hoạt động như mong đợi ngoại trừ Bề mặt xem trước máy ảnh (B). Nó được xoay 90 độ. Họ chỉ có một cách duy nhất để làm cho nó đúng là đặt ứng dụng ở chế độ nằm ngang, điều này sẽ ném tất cả các tab của tôi ra xung quanh và khá nhiều điều không thể thực hiện được.

Giải pháp của tôi là: thay thế

hoạt động máy ảnh của tôi với một hoạt động thường xuyên trống trừ

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

Thao tác này sẽ khởi chạy CameraActivity của tôi. Và điều đó hoạt động tốt. Tôi đã phải thực hiện bố cục tuyến tính và bao gồm 3 hình ảnh trông giống như các tab thực, vì vậy tôi có thể thử và bắt chước hoạt động của các tab trong khi xoay màn hình theo chiều ngang và giữ cho hình ảnh ở dạng dọc. Người dùng có thể nhấp vào một trong các hình ảnh (nút) để hiển thị tab tiếp theo. Đây là vấn đề của tôi. Nó sẽ thoát khỏi 'hoạt động máy ảnh' của tôi trở lại 'hoạt động trống' trong một tab, nơi nó sẽ được hiểu khi nhấp vào tab mong muốn từ hình ảnh của tôi.

Điều chính là, khi nó quay trở lại, nó sẽ trở lại một trang trống (màu đen) dưới một tab (vì nó 'trống rỗng'). Làm cách nào để ghi lại sự kiện quay lại trang đã gọi là hoạt động và sau đó xem họ đã thực hiện hành động nào?

Tôi có thể đặt onclicklistener nơi tôi có thể phản hồi các tab giả mạo (hình ảnh) đang được nhấp để thoát khỏi hoạt động của máy ảnh. Khi thoát, tab sẽ cập nhật để bạn quay trở lại. bất kỳ đề xuất?

Cảm ơn,

Câu trả lời:


159

Tôi sẽ tập trung vào việc trả lời cách giải quyết cách giải quyết của bạn để nó hoạt động như bạn muốn.

Để nắm bắt các hành động được thực hiện trên một Hoạt động trong một hoạt động khác, cần ba bước.

Khởi chạy Hoạt động phụ ('Hoạt động máy ảnh' của bạn) dưới dạng hoạt động phụ bằng cách sử dụng startActivityForResultthay vì startActivity.

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

Trong hoạt động phụ (Hoạt động máy ảnh), thay vì chỉ đóng Hoạt động khi người dùng nhấp vào hình ảnh tab khác, bạn cần tạo Ý định mới và bao gồm chỉ mục của tab để hiển thị khi bạn quay lại ứng dụng mẹ bằng cách sử dụng gói tính năng bổ sung . Để chuyển nó trở lại cuộc gọi phụ huynh setResulttrước khi gọi finishđóng Hoạt động camera.

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

Bước cuối cùng là trong Hoạt động gọi, ghi đè onActivityResultđể lắng nghe các cuộc gọi lại từ Hoạt động camera. Lấy phần bổ sung từ Intent được trả lại để xác định chỉ mục của tab bạn sẽ hiển thị.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Switch tabs using the index.
      } 
      break; 
    } 
  } 
} 

3
Tại sao bạn lại bật Mã yêu cầu rồi kiểm tra xem Mã yêu cầu == RESULT_OK? Chỉnh sửa: Đừng bận tâm, tôi thấy sự khác biệt về Mã yêu cầu / Mã kết quả.
varikin

1
Tôi có thể làm điều này với một AsynkTaskhoạt động thứ hai ?
Francisco Corrales Morales
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.