2012-11-01 36 views
7

Vẫn đang làm việc trên các kỹ năng của tôi trong Android.Nhận dữ liệu từ hoạt động khác

Vấn đề của tôi ở đây là tôi có nhãn từ cơ sở dữ liệu chứa tên trong hộp xoay, khi tôi nhấp vào nhãn, hộp thoại đến và cung cấp cho bạn ba lựa chọn: 1. cập nhật. 2. xóa. 3. hủy. Tôi đã trải qua lựa chọn thứ hai và thứ ba, nhưng trong bản cập nhật, tôi đang gặp vấn đề này; tôi đi đến một hoạt động khác có editText và 2 Buttons, lưu và hủy, tôi muốn nút lưu để lấy dữ liệu từ editText trong putExtra và gửi lại cho cùng hoạt động trước đó và thay đổi nhãn cũ bằng dữ liệu từ editText.

Tôi đánh giá cao sự giúp đỡ nào. Cảm ơn trước.

+0

bạn có thể chọn tùy chọn hoặc đặt phương thức bổ sung được đưa ra dưới đây. – itsrajesh4uguys

+0

sử dụng startActivityForResult để gọi một hoạt động khác và nhận kết quả trên onActivityResult –

Trả lời

11

Trong hoạt động thứ hai của bạn, bạn có thể lấy dữ liệu từ hoạt động đầu tiên với phương pháp getIntent() và sau đó getStringExtra(), getIntExtra() ...

Sau đó, quay trở lại hoạt động đầu tiên của bạn, bạn phải sử dụng phương thức setResult() với dữ liệu ý định để trả về dưới dạng tham số.

Để nhận dữ liệu trả về từ hoạt động thứ hai của bạn trong hoạt động đầu tiên, chỉ cần ghi đè phương thức onActivityResult() và sử dụng ý định lấy dữ liệu.

Hoạt động đầu tiên:

//In the method that is called when click on "update" 
Intent intent = ... //Create the intent to go in the second activity 
intent.putExtra("oldValue", "valueYouWantToChange"); 
startActivityForResult(intent, someIntValue); //I always put 0 for someIntValue 

//In your class 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    //Retrieve data in the intent 
    String editTextValue = intent.getStringExtra("valueId"); 
} 

Hoạt động thứ hai:

//When activity is created 
String value = intent.getStringExtra("oldValue"); 
//Then change the editText value 

//After clicking on "save" 
Intent intent = new Intent(); 
intent.putExtra("valueId", value); //value should be your string from the edittext 
setResult(somePositiveInt, intent); //The data you want to send back 
finish(); //That's when you onActivityResult() in the first activity will be called 

Đừng quên để bắt đầu hoạt động thứ hai của bạn với phương pháp startActivityForResult().

+1

Cảm ơn bạn rất nhiều công việc của nó. – Tayseer

4

Bạn phải chuyển thông tin dưới dạng tính năng bổ sung.

Đi qua các thông tin

Intent i = new Intent(); 
i.setClassName("com.example", "com.example.activity"); 
i.putExtra("identifier", VALUE); 
startActivity(i); 

Lấy thông tin

Bundle extras = getIntent().getExtras(); 
String exampleString = extras.getString("identifier"); 
1

Khi bạn muốn bắt đầu hoạt động thứ hai, sử dụng startActivityForResult(your intent, request code); Trong sử dụng Hoạt động đầu tiên của bạn

protected void onActivityResult(int requestCode, int resultCode, 
      Intent data) { 
     if (requestCode == your_reques_code) { 
      if (resultCode == RESULT_OK) { 
       // do your stuff   
      } 
     } 
} 

Trước khi kết thúc thứ hai ctivity không quên này,

Intent data = new Intent(); 
data.putExtra("text", edtText.getText()); 
setResult(RESULT_OK, data); 
+0

Sẽ thật tuyệt nếu mã của bạn chứa mọi thứ cần thiết để biên dịch nó, như 'int RESULT_OK = 1'. Một lời giải thích nhỏ cũng sẽ tốt hơn là không có lời giải thích (đặc biệt là khi khởi động chỉ ra, rằng họ vẫn đang làm việc trên các kỹ năng của họ) – winklerrr

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