2012-11-01 49 views
7

仍在使用我的Android技能。從其他活動中獲取數據

這裏我的問題是,我的數據庫中有一個標籤,其中包含一個名爲spinner的名稱,當我點擊標籤時,對話框出現並給出三個選擇: 1.更新。 2.刪除。 3.取消。 我通過了第二個和第三個選擇,但是在更新中我面臨這個問題; 我去另一個具有editText和2個按鈕的活動,保存並取消,我想要保存按鈕從putExtra中的editText獲取數據,並將其發回到之前的相同活動,並使用數據更改舊標籤來自editText。

我很感激任何幫助。 在此先感謝。

+0

您可以選擇偏好或者添加下面給出的額外方法。 – itsrajesh4uguys

+0

使用startActivityForResult調用另一個活動並在onActivityResult上獲取結果 –

回答

11

在你的第二個活動,您可以用該方法getIntent()然後getStringExtra()getIntExtra()得到的第一個活動的數據...

然後返回到您的第一個活動,你必須使用帶有意向數據的setResult()方法作爲參數返回。

要在第一個活動中從第二個活動獲取返回數據,只需覆蓋onActivityResult()方法並使用意圖獲取數據。

第一項活動:

//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"); 
} 

次活動:

//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 

不要忘了與startActivityForResult()方法開始你的第二個活動。

+1

非常感謝你的工作。 – Tayseer

4

您必須將這些信息作爲附加內容傳遞。

傳遞信息

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

獲取信息

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

當你要開始第二次活動,請使用startActivityForResult(your intent, request code); 在你的第一個活動中使用

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

之前完成第二個a ctivity不要忘記這一點,

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

如果代碼包含編譯它所需的所有內容,比如'int RESULT_OK = 1',那將會很不錯。 一個小的解釋也會比沒有解釋更好(特別是當線程啓動者指出,他們仍然在他們的技能) – winklerrr