2011-02-09 34 views
29

Giả sử tôi có lớp first.java (lớp hoạt động) và tôi bắt đầu một hoạt động khác trong lớp này (lớp thứ hai.java - lớp hoạt động). Làm thế nào tôi có thể truy cập vào thể hiện của first.java từ second.java? Ai đó có thể cho tôi một lời giải thích tốt về điều này .. Một ví dụ sẽ là tuyệt vời ...Truy cập cá thể hoạt động gốc?

Trả lời

-2

hãy thử điều này nếu công việc này 4 u .........
một cái gì đó như thế này .....

class first 
{ 
public static first instance; 
oncreate() 
{ 
instance=this; 
} 

public static getInstance() 
{ 
return instance; 
} 

}

bây giờ từ thứ hai gọi lớp first.getInstance();

bạn cũng có thể trực tiếp acess dụ trong cách tĩnh như first.instance này .......
Thanks ...

+0

điều này tôi cảm thấy là câu trả lời đúng cho câu hỏi – Javanator

+4

Hãy nhớ rằng tham chiếu tĩnh vẫn còn tồn tại miễn là lớp tồn tại trong jvm. Vì vậy, nếu bạn đặt Hoạt động thành biến tĩnh, bạn có thể gặp sự cố bộ nhớ ngay cả sau khi Hoạt động đã chạy phương thức onDestroy của nó. –

+1

Tôi nghĩ có vẻ khó xử. Singletons không phải lúc nào cũng tốt. – Cristian

38

Nếu bạn cần hoạt động thứ hai của bạn trở lại một số dữ liệu để hoạt động lần đầu tiên tôi của bạn khuyên bạn nên sử dụng startActivityForResult() để bắt đầu hoạt động thứ hai của bạn. Sau đó, trong onResult() trong hoạt động đầu tiên của bạn, bạn có thể thực hiện công việc cần thiết.

Trong First.java nơi bạn bắt đầu Second.java:

Intent intent = new Intent(this, Second.class); 
int requestCode = 1; // Or some number you choose 
startActivityForResult(intent, requestCode); 

Phương pháp kết quả:

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    // Collect data from the intent and use it 
    String value = data.getString("someValue"); 
} 

Trong Second.java:

Intent intent = new Intent(); 
intent.putExtra("someValue", "data"); 
setResult(RESULT_OK, intent); 
finish(); 

Nếu bạn không muốn đợi cho hoạt động thứ hai kết thúc trước khi bạn thực hiện một số công việc trong Hoạt động đầu tiên, thay vào đó bạn có thể gửi một chương trình phát sóng đầu tiên hoạt động phản ứng lại.

EDIT:

Nếu bạn cần truy cập vào một số giá trị trong hoạt động đầu tiên của bạn mà không làm một tham chiếu tĩnh với nó, bạn có thể xem xét việc đưa các hoạt động của bạn trong một ActivityGroup.

Vì vậy, nhóm hoạt động bắt đầu hoạt động đầu tiên. Và sau đó hoạt động đầu tiên sử dụng ActivityGroup để bắt đầu hoạt động thứ hai. Sau đó, bạn sẽ có quyền truy cập vào hoạt động Đầu tiên thông qua một cuộc gọi đến getParent() trong hoạt động thứ hai.

class MyActivityGroup extends ActivityGroup { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    startChildActivity("first", new Intent(this, First.class)); 
    } 
    public void startChildActivity(Intent intent) { 
    Window window = getLocalActivityManager().startActivity(id, intent); 
     if (window != null) { 
     setContentView(window.getDecorView()); 
    } 
    } 
} 

Trong First.class:

Intent = new Intent(this, Second.class); 
((MyActivityGroup) getParent()).startChildActivity("second", intent); 

Trong Second.class:

Activity first = (First) getParent(); 
+2

ya bạn là đúng cant0na, nhưng tôi nghĩ rằng u dint có được câu hỏi một cách chính xác.anh ấy không muốn hoạt động thứ 2 trả về một số kết quả nhưng anh ấy thực sự muốn 2 dữ liệu chuyển (ngữ cảnh) từ hoạt động đầu tiên 2 giây .... –

+1

tôi đồng ý với N-Joy ở đây và câu trả lời này có hai phiếu bầu cũng là – Javanator

+0

Anh ấy cũng yêu cầu một lời giải thích và một ví dụ. A đã đưa ra một ví dụ về cách nó có thể được thực hiện. –

-1

Bạn không thể tạo một hoạt động trực tiếp. Trong hoạt động đầu tiên có một biến hoạt động tĩnh như thế này,

public static Activity activity; 

Trong onCreate làm điều này.

activity = this; 

Sau đó, trong hoạt động thứ hai làm được điều này,

Activity activity = (your activity name).activity; 

Edit: Đối với truyền dữ liệu từ một hoạt động để hoạt động khác đây không phải là đường đi. Câu trả lời ở trên là lấy ví dụ hoạt động từ hoạt động khác mà ban đầu được hỏi.

Để chuyển dữ liệu từ một hoạt động này sang hoạt động khác thường sử dụng nhóm. Nhưng nếu dữ liệu không phải là kiểu dữ liệu nguyên thủy, thì hãy sử dụng lớp đối tượng cần thực hiện giao diện có thể đặt hàng hoặc có thể tuần tự hóa được. Sau đó, thông qua gói chỉ danh sách các đối tượng có thể chuyển đổi được chúng tôi có thể vượt qua.

+4

Điều này hoạt động hoàn hảo. Các đơn giản, tốt hơn –

+14

Xin đừng bao giờ làm điều này giống như thế này. Nó sẽ bị rò rỉ. – Alex

+0

@Alex lý do tại sao nó bị rò rỉ? – UmbySlipKnot

3

Chỉ có điều này nên làm việc

class first 
{ 
    public static first instance; 
    oncreate() 
    { 
     instance = this; 
    } 
} 

first.instance là điều cần thiết mà có thể truy cập từ lớp thứ hai

+0

Không đảm bảo rằng trường hợp của bạn sẽ vẫn hợp lệ khi bạn truy cập nó từ hoạt động thứ hai. –

+0

chúng tôi có thể mã để làm như vậy .. :) – Javanator

+0

câu trả lời ở đây là cụ thể cho mã câu hỏi được yêu cầu. Ý định nên được chỉ để có được hướng tốt. – Javanator

6

Bạn chỉ có thể gọi getParent() từ hoạt động trẻ em.

Tôi không biết tại sao các câu trả lời khác quá phức tạp.

+7

Vì đó là câu trả lời chưa hoàn chỉnh. getParent() sẽ chỉ hoạt động trên các hoạt động được nhúng dưới dạng con, nó sẽ trả về null trên những người khác. – acib708

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