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
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 ...
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();
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 .... –
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
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. –
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.
Điều này hoạt động hoàn hảo. Các đơn giản, tốt hơn –
Xin đừng bao giờ làm điều này giống như thế này. Nó sẽ bị rò rỉ. – Alex
@Alex lý do tại sao nó bị rò rỉ? – UmbySlipKnot
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
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.
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
- 1. Tạo cá thể của lớp truy cập
- 2. Truy cập typedef từ cá thể
- 3. Truy cập cá thể EC2 sau khi mất cặp khóa
- 4. Quản lý quyền truy cập cá thể giữa trên EC2
- 5. Asynctask trong Hoạt động phân đoạn hoặc hoạt động gốc?
- 6. Truy cập các phiên hoạt động trong PHP
- 7. Làm cách nào để xác định khả năng truy cập của một cá thể MemberInfo?
- 8. Làm thế nào để giữ một cá thể hoạt động đơn lẻ nhưng có thể cập nhật chế độ xem?
- 9. Truy cập Shared Preferences từ Hoạt động khác nhau (Android)
- 10. Thực hiện một hoạt động cụ thể dưới dạng hoạt động gốc trong ngăn xếp
- 11. Truy cập phương thức Phân đoạn từ Hoạt động ViewPager
- 12. Truy cập Fragment View từ hoạt động của OnCreate
- 13. Kiểm soát quyền truy cập mức cá thể trong Apache Shiro
- 14. Truy cập dữ liệu gốc của DataContext từ DataTemplate
- 15. a: đã truy cập không hoạt động trong Mozilla Firefox
- 16. ASP.NET MVC OutputCache không hoạt động đối với URI gốc
- 17. EC2: Chờ cho đến khi một cá thể mới đang ở trạng thái hoạt động
- 18. Xử lý hoạt động gốc hiện có khi khởi động lại hoạt động gốc từ bộ lọc ý định
- 19. Truy cập di động động
- 20. Làm thế nào tôi có thể kích hoạt quyền truy cập SSH gốc trong một bản sao EC2 của Amazon?
- 21. Cách tìm một cá thể lớp trong một JVM đang hoạt động
- 22. Điều gì sẽ xảy ra khi một cá thể Hibernate không thể truy cập bộ nhớ cache cấp thứ hai?
- 23. Làm cách nào để truy cập vào nhật ký mysql từ một cá thể RDS
- 24. Lớp PHP: truy cập vào cá thể gọi từ phương thức được gọi là
- 25. Cách truy cập cá thể lớp DataContext được tạo trong XAML trong codebehind?
- 26. Chế độ xem tùy chỉnh có thể truy cập hoạt động của nó như thế nào?
- 27. Không thể truy cập tự :: khi không có phạm vi lớp đang hoạt động
- 28. Không thể truy cập AAssetManager trong mã gốc được chuyển từ Java trong WallpaperService
- 29. Khởi động nhiều cá thể mới nổi tự động
- 30. Có thể mô hình truy cập động cơ Rails 3 từ ứng dụng gốc của nó không?
điều này tôi cảm thấy là câu trả lời đúng cho câu hỏi – Javanator
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ó. –
Tôi nghĩ có vẻ khó xử. Singletons không phải lúc nào cũng tốt. – Cristian