2009-01-16 38 views
78

Tôi có câu hỏi liên quan đến việc khởi chạy các hoạt động mới. Nó sôi xuống này. Tôi có 3 tab ở chế độ xemAndroid: Chụp lại hoạt động

Yêu cầu là ứng dụng chạy ở chế độ Chân dung.

Tất cả 3 tab hoạt động như dự kiến ​​w/ngoại trừ Bề mặt xem trước máy ảnh (B). Nó được xoay 90 độ. Họ chỉ có cách để làm cho nó chính xác là để thiết lập các ứng dụng cảnh quan mà ném tất cả các tab của tôi xung quanh, và là khá nhiều unworkable.

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

hoạt động máy ảnh của tôi với một hoạt động thường xuyên đó là trống rỗng w/ngoại trừ

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

này sẽ khởi chạy CameraActivity tôi. Và điều đó hoạt động tốt. Tôi đã phải làm một bố trí 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 sang chế độ ngang và giữ hình ảnh dưới 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 quay trở lại 'hoạt động trống' trong một tab, nơi nó sẽ được diễn giải để nhấp vào tab được xác định từ hình ảnh của tôi.

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

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

Xin cảm ơn,

Trả lời

155

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

Để nắm bắt các tác vụ đượ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 startActivityForResult thay vì startActivity.

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

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

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

Bước cuối cùng là hoạt động gọi điện, ghi đè onActivityResult để nghe gọi lại từ máy ảnh Hoạt động. Nhận thêm từ Mục đích được trả về để 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 bật mã requestCode sau đó kiểm tra xem requestCode == RESULT_OK? Edit: Nevermind, tôi thấy sự khác biệt requestCode/resultCode. – varikin

+1

Tôi có thể làm điều này với 'AsynkTask' làm hoạt động * thứ hai * không? –

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