2012-09-06 36 views
15

Giống như tôi có thể gửi dữ liệu từ một hoạt động khác sử dụng này:Tôi có thể gửi lại dữ liệu bằng cách sử dụng kết thúc bằng cách nào?

intent.putExtra("Name", Value); 

làm thế nào tôi có thể gửi dữ liệu khi tôi đang sử dụng finish() để có được trở lại hoạt động trước đó.

Trong ứng dụng của tôi từ Activity_A tôi sẽ đến Activity_B. Trong Activity_B tôi đang đánh dấu một vị trí trên bản đồ, mang lại cho tôi vĩ độ và kinh độ. Sau đó, tôi muốn sử dụng lat và lng này trong Activity_A. Nhưng tôi không muốn quay lại Activity_A bằng ý định, bởi vì tôi không muốn tạo lại Activity_A vì một số dữ liệu đã được lấp đầy sẽ bị mất.

+0

lưu giá trị trong một biến toàn cầu hoặc sử dụng chia sẻ pref –

+0

tôi có một vấn đề với việc sử dụng biến toàn cầu. nếu tôi đang sử dụng nó như Activity_B.lat, Activity_A.lng này.Khi tôi đang ở Activity_A, hãy vào Activity_B và quay lại Activity_A, đóng ứng dụng bằng nút home và mở lại sau 5 phút, tôi có ngoại lệ con trỏ null vì Activity_B có biến này bị hủy –

+0

U có thể tham chiếu liên kết này. .. nó sẽ giúp bạn chắc chắn ... http: //android-er.blogspot.in/2011/08/return-result-to-onactivityresult.html –

Trả lời

20

Như bạn đang sử dụng intent.putExtra("Name", Value);, sử dụng điều tương tự khi kết thúc hoạt động này cũng có.

Đối với cựu .:

Từ activityA bạn gọi activityB như:

intent.putExtra("Name", Value); 
now instead of startActivity() use `startActivityForResult()` 

Và từ activityB, trong khi kết thúc hoạt động này, hãy gọi:

setResult(RESULT_OK); 

Bây giờ trong activityA, onActivityResult của bạn sẽ được gọi, giống như:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
} 

Vì vậy, bạn có thể xử lý nó theo cách inthis.

+1

vì vậy tôi giữ intent.putExtra ("lat ", lat); và sau đó setResult (1, ý định); sau đó kết thúc() ?? –

+0

đúng vậy. – Shrikant

+0

và trong onACtivityResult, data.getDoubleExtra ("lat"); –

1

sử dụng startActivityForResult để bắt đầu B và setResult trước B finish và xử lý onAcitivityResult A

+0

thanks a lot 1 –

15

Trong Hoạt động A:

// Add more, if you call different activities from Activity A 
private static final REQUEST_GET_MAP_LOCATION = 0; 

void doSomething() { 
    ... 
    startActivityForResult(theIntentYouUseToStartActivityB, REQUEST_GET_MAP_LOCATION); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_GET_MAP_LOCATION && resultCode == Activity.RESULT_OK) { 
     int latitude = data.getIntExtra("latitude", 0); 
     int longitude = data.getIntExtra("longitude", 0); 
     // do something with B's return values 
    } 
} 

Trong Hoạt động B:

... 
setResult(Activity.RESULT_OK, 
    new Intent().putExtra("latitude", latitude).putExtra("longitude", longitude)); 
finish(); 
... 
+0

tôi có một trường hợp, Activity_A gọi Activity_B mà inturn gọi Activity_C và kết thúc(); ... Bây giờ nếu tôi gọi kết thúc() trên Activity_C tôi nhận được Activity_A, nhưng ở đây trong onActiviyResult, nó không được nhập vào khối mà bạn đã cho. thats dự kiến ​​vì Từ Activity_B đến Activity_C tôi chỉ sử dụng startActivity (intent). HOw để giải quyết trường hợp này ?? cảm ơn bạn –

+0

@ Archie.bpgc: Khi bạn gọi Activity_C trong B, bạn có 'setResult' trước khi gọi' kết thúc' không? – Heinzi

+0

Không, tôi đã không sử dụng bất cứ điều gì ngoại trừ Intent (Activity_B, ACtivity_C), startActivity (intent) và kết thúc(); –

3

Gọi bạn Activity_B với startActivityForResult(), từ bạn Activity_A:

//Starting a new Intent 
Intent nextScreen = new Intent(getApplicationContext(), Activity_B.class); 
// starting new activity 
startActivityForResult(nextScreen,1000); 

Khi bạn xong làm việc trên Activity_B , bạn gọi số setResult() đến s et dữ liệu, tiếp theo là finish() như thế này

//Starting the previous Intent 
Intent previousScreen = new Intent(getApplicationContext(), Activity_A.class); 
//Sending the data to Activity_A 
previousScreen.putExtra("Bla"," Blabla"); 
setResult(1000, previousScreen); 
finish(); 

này sẽ đưa bạn trở về trước Activity_A của bạn.

Trong Activity_A, ghi đè onActivityResult().

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data)  
    { 
    super.onActivityResult(requestCode, resultCode, data); 
    String bla = data.getStringExtra("Bla");  
    } 

Tìm thấy here

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